default rel
%define XMMWORD
%define YMMWORD
%define ZMMWORD
EXTERN  OPENSSL_ia32cap_P
global  ossl_vaes_vpclmulqdq_capable

ALIGN   32
ossl_vaes_vpclmulqdq_capable:
        mov     rcx,QWORD[((OPENSSL_ia32cap_P+8))]

        mov     rdx,6600291188736
        xor     eax,eax
        and     rcx,rdx
        cmp     rcx,rdx
        cmove   rax,rcx
        DB      0F3h,0C3h               ;repret

section .text code align=64

global  ossl_aes_gcm_init_avx512

ALIGN   32
ossl_aes_gcm_init_avx512:

DB      243,15,30,250
        vpxorq  xmm16,xmm16,xmm16


        mov     eax,DWORD[240+rcx]
        cmp     eax,9
        je      NEAR $L$aes_128_0
        cmp     eax,11
        je      NEAR $L$aes_192_0
        cmp     eax,13
        je      NEAR $L$aes_256_0
        jmp     NEAR $L$exit_aes_0
ALIGN   32
$L$aes_128_0:
        vpxorq  xmm16,xmm16,XMMWORD[rcx]

        vaesenc xmm16,xmm16,XMMWORD[16+rcx]

        vaesenc xmm16,xmm16,XMMWORD[32+rcx]

        vaesenc xmm16,xmm16,XMMWORD[48+rcx]

        vaesenc xmm16,xmm16,XMMWORD[64+rcx]

        vaesenc xmm16,xmm16,XMMWORD[80+rcx]

        vaesenc xmm16,xmm16,XMMWORD[96+rcx]

        vaesenc xmm16,xmm16,XMMWORD[112+rcx]

        vaesenc xmm16,xmm16,XMMWORD[128+rcx]

        vaesenc xmm16,xmm16,XMMWORD[144+rcx]

        vaesenclast     xmm16,xmm16,XMMWORD[160+rcx]
        jmp     NEAR $L$exit_aes_0
ALIGN   32
$L$aes_192_0:
        vpxorq  xmm16,xmm16,XMMWORD[rcx]

        vaesenc xmm16,xmm16,XMMWORD[16+rcx]

        vaesenc xmm16,xmm16,XMMWORD[32+rcx]

        vaesenc xmm16,xmm16,XMMWORD[48+rcx]

        vaesenc xmm16,xmm16,XMMWORD[64+rcx]

        vaesenc xmm16,xmm16,XMMWORD[80+rcx]

        vaesenc xmm16,xmm16,XMMWORD[96+rcx]

        vaesenc xmm16,xmm16,XMMWORD[112+rcx]

        vaesenc xmm16,xmm16,XMMWORD[128+rcx]

        vaesenc xmm16,xmm16,XMMWORD[144+rcx]

        vaesenc xmm16,xmm16,XMMWORD[160+rcx]

        vaesenc xmm16,xmm16,XMMWORD[176+rcx]

        vaesenclast     xmm16,xmm16,XMMWORD[192+rcx]
        jmp     NEAR $L$exit_aes_0
ALIGN   32
$L$aes_256_0:
        vpxorq  xmm16,xmm16,XMMWORD[rcx]

        vaesenc xmm16,xmm16,XMMWORD[16+rcx]

        vaesenc xmm16,xmm16,XMMWORD[32+rcx]

        vaesenc xmm16,xmm16,XMMWORD[48+rcx]

        vaesenc xmm16,xmm16,XMMWORD[64+rcx]

        vaesenc xmm16,xmm16,XMMWORD[80+rcx]

        vaesenc xmm16,xmm16,XMMWORD[96+rcx]

        vaesenc xmm16,xmm16,XMMWORD[112+rcx]

        vaesenc xmm16,xmm16,XMMWORD[128+rcx]

        vaesenc xmm16,xmm16,XMMWORD[144+rcx]

        vaesenc xmm16,xmm16,XMMWORD[160+rcx]

        vaesenc xmm16,xmm16,XMMWORD[176+rcx]

        vaesenc xmm16,xmm16,XMMWORD[192+rcx]

        vaesenc xmm16,xmm16,XMMWORD[208+rcx]

        vaesenclast     xmm16,xmm16,XMMWORD[224+rcx]
        jmp     NEAR $L$exit_aes_0
$L$exit_aes_0:

        vpshufb xmm16,xmm16,XMMWORD[SHUF_MASK]

        vmovdqa64       xmm2,xmm16
        vpsllq  xmm16,xmm16,1
        vpsrlq  xmm2,xmm2,63
        vmovdqa xmm1,xmm2
        vpslldq xmm2,xmm2,8
        vpsrldq xmm1,xmm1,8
        vporq   xmm16,xmm16,xmm2

        vpshufd xmm2,xmm1,36
        vpcmpeqd        xmm2,xmm2,XMMWORD[TWOONE]
        vpand   xmm2,xmm2,XMMWORD[POLY]
        vpxorq  xmm16,xmm16,xmm2

        vmovdqu64       XMMWORD[336+rdx],xmm16
        vshufi32x4      ymm4,ymm16,ymm16,0x00
        vmovdqa ymm3,ymm4

        vpclmulqdq      ymm0,ymm3,ymm4,0x11
        vpclmulqdq      ymm1,ymm3,ymm4,0x00
        vpclmulqdq      ymm2,ymm3,ymm4,0x01
        vpclmulqdq      ymm3,ymm3,ymm4,0x10
        vpxorq  ymm3,ymm3,ymm2

        vpsrldq ymm2,ymm3,8
        vpslldq ymm3,ymm3,8
        vpxorq  ymm0,ymm0,ymm2
        vpxorq  ymm3,ymm3,ymm1



        vmovdqu64       ymm2,YMMWORD[POLY2]

        vpclmulqdq      ymm1,ymm2,ymm3,0x01
        vpslldq ymm1,ymm1,8
        vpxorq  ymm3,ymm3,ymm1



        vpclmulqdq      ymm1,ymm2,ymm3,0x00
        vpsrldq ymm1,ymm1,4
        vpclmulqdq      ymm3,ymm2,ymm3,0x10
        vpslldq ymm3,ymm3,4

        vpternlogq      ymm3,ymm0,ymm1,0x96

        vmovdqu64       XMMWORD[320+rdx],xmm3
        vinserti64x2    ymm4,ymm3,xmm16,1
        vmovdqa64       ymm5,ymm4

        vpclmulqdq      ymm0,ymm4,ymm3,0x11
        vpclmulqdq      ymm1,ymm4,ymm3,0x00
        vpclmulqdq      ymm2,ymm4,ymm3,0x01
        vpclmulqdq      ymm4,ymm4,ymm3,0x10
        vpxorq  ymm4,ymm4,ymm2

        vpsrldq ymm2,ymm4,8
        vpslldq ymm4,ymm4,8
        vpxorq  ymm0,ymm0,ymm2
        vpxorq  ymm4,ymm4,ymm1



        vmovdqu64       ymm2,YMMWORD[POLY2]

        vpclmulqdq      ymm1,ymm2,ymm4,0x01
        vpslldq ymm1,ymm1,8
        vpxorq  ymm4,ymm4,ymm1



        vpclmulqdq      ymm1,ymm2,ymm4,0x00
        vpsrldq ymm1,ymm1,4
        vpclmulqdq      ymm4,ymm2,ymm4,0x10
        vpslldq ymm4,ymm4,4

        vpternlogq      ymm4,ymm0,ymm1,0x96

        vmovdqu64       YMMWORD[288+rdx],ymm4

        vinserti64x4    zmm4,zmm4,ymm5,1


        vshufi64x2      zmm3,zmm4,zmm4,0x00
        vmovdqa64       zmm5,zmm4

        vpclmulqdq      zmm0,zmm4,zmm3,0x11
        vpclmulqdq      zmm1,zmm4,zmm3,0x00
        vpclmulqdq      zmm2,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm2

        vpsrldq zmm2,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm0,zmm0,zmm2
        vpxorq  zmm4,zmm4,zmm1



        vmovdqu64       zmm2,ZMMWORD[POLY2]

        vpclmulqdq      zmm1,zmm2,zmm4,0x01
        vpslldq zmm1,zmm1,8
        vpxorq  zmm4,zmm4,zmm1



        vpclmulqdq      zmm1,zmm2,zmm4,0x00
        vpsrldq zmm1,zmm1,4
        vpclmulqdq      zmm4,zmm2,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm0,zmm1,0x96

        vmovdqu64       ZMMWORD[224+rdx],zmm4
        vshufi64x2      zmm3,zmm4,zmm4,0x00

        vpclmulqdq      zmm0,zmm5,zmm3,0x11
        vpclmulqdq      zmm1,zmm5,zmm3,0x00
        vpclmulqdq      zmm2,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm2

        vpsrldq zmm2,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm0,zmm0,zmm2
        vpxorq  zmm5,zmm5,zmm1



        vmovdqu64       zmm2,ZMMWORD[POLY2]

        vpclmulqdq      zmm1,zmm2,zmm5,0x01
        vpslldq zmm1,zmm1,8
        vpxorq  zmm5,zmm5,zmm1



        vpclmulqdq      zmm1,zmm2,zmm5,0x00
        vpsrldq zmm1,zmm1,4
        vpclmulqdq      zmm5,zmm2,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm0,zmm1,0x96

        vmovdqu64       ZMMWORD[160+rdx],zmm5

        vpclmulqdq      zmm0,zmm4,zmm3,0x11
        vpclmulqdq      zmm1,zmm4,zmm3,0x00
        vpclmulqdq      zmm2,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm2

        vpsrldq zmm2,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm0,zmm0,zmm2
        vpxorq  zmm4,zmm4,zmm1



        vmovdqu64       zmm2,ZMMWORD[POLY2]

        vpclmulqdq      zmm1,zmm2,zmm4,0x01
        vpslldq zmm1,zmm1,8
        vpxorq  zmm4,zmm4,zmm1



        vpclmulqdq      zmm1,zmm2,zmm4,0x00
        vpsrldq zmm1,zmm1,4
        vpclmulqdq      zmm4,zmm2,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm0,zmm1,0x96

        vmovdqu64       ZMMWORD[96+rdx],zmm4
        vzeroupper
$L$abort_init:
        DB      0F3h,0C3h               ;repret


global  ossl_aes_gcm_setiv_avx512

ALIGN   32
ossl_aes_gcm_setiv_avx512:

$L$setiv_seh_begin:
DB      243,15,30,250
        push    rbx

$L$setiv_seh_push_rbx:
        push    rbp

$L$setiv_seh_push_rbp:
        push    r12

$L$setiv_seh_push_r12:
        push    r13

$L$setiv_seh_push_r13:
        push    r14

$L$setiv_seh_push_r14:
        push    r15

$L$setiv_seh_push_r15:
        push    rdi
$L$setiv_seh_push_rdi:
        push    rsi
$L$setiv_seh_push_rsi:

        sub     rsp,168
$L$setiv_seh_allocstack_xmm:










        lea     rbp,[160+rsp]

$L$setiv_seh_setfp:
        vmovdqu XMMWORD[rsp],xmm6
$L$setiv_seh_save_xmm6:
        vmovdqu XMMWORD[16+rsp],xmm7
$L$setiv_seh_save_xmm7:
        vmovdqu XMMWORD[32+rsp],xmm8
$L$setiv_seh_save_xmm8:
        vmovdqu XMMWORD[48+rsp],xmm9
$L$setiv_seh_save_xmm9:
        vmovdqu XMMWORD[64+rsp],xmm10
$L$setiv_seh_save_xmm10:
        vmovdqu XMMWORD[80+rsp],xmm11
$L$setiv_seh_save_xmm11:
        vmovdqu XMMWORD[96+rsp],xmm12
$L$setiv_seh_save_xmm12:
        vmovdqu XMMWORD[112+rsp],xmm13
$L$setiv_seh_save_xmm13:
        vmovdqu XMMWORD[128+rsp],xmm14
$L$setiv_seh_save_xmm14:
        vmovdqu XMMWORD[144+rsp],xmm15
$L$setiv_seh_save_xmm15:

$L$setiv_seh_prolog_end:
        sub     rsp,816
        and     rsp,(-64)
        cmp     r9,12
        je      NEAR iv_len_12_init_IV
        vpxor   xmm2,xmm2,xmm2
        mov     r10,r8
        mov     r11,r9
        or      r11,r11
        jz      NEAR $L$_CALC_AAD_done_1

        xor     rbx,rbx
        vmovdqa64       zmm16,ZMMWORD[SHUF_MASK]

$L$_get_AAD_loop48x16_1:
        cmp     r11,768
        jl      NEAR $L$_exit_AAD_loop48x16_1
        vmovdqu64       zmm11,ZMMWORD[r10]
        vmovdqu64       zmm3,ZMMWORD[64+r10]
        vmovdqu64       zmm4,ZMMWORD[128+r10]
        vmovdqu64       zmm5,ZMMWORD[192+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb zmm5,zmm5,zmm16
        test    rbx,rbx
        jnz     NEAR $L$_skip_hkeys_precomputation_2

        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vmovdqu64       ZMMWORD[704+rsp],zmm1

        vmovdqu64       zmm9,ZMMWORD[224+rdx]
        vmovdqu64       ZMMWORD[640+rsp],zmm9


        vshufi64x2      zmm9,zmm9,zmm9,0x00

        vmovdqu64       zmm10,ZMMWORD[160+rdx]
        vmovdqu64       ZMMWORD[576+rsp],zmm10

        vmovdqu64       zmm12,ZMMWORD[96+rdx]
        vmovdqu64       ZMMWORD[512+rsp],zmm12

        vpclmulqdq      zmm13,zmm10,zmm9,0x11
        vpclmulqdq      zmm15,zmm10,zmm9,0x00
        vpclmulqdq      zmm17,zmm10,zmm9,0x01
        vpclmulqdq      zmm10,zmm10,zmm9,0x10
        vpxorq  zmm10,zmm10,zmm17

        vpsrldq zmm17,zmm10,8
        vpslldq zmm10,zmm10,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm10,zmm10,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm10,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm10,zmm10,zmm15



        vpclmulqdq      zmm15,zmm17,zmm10,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm10,zmm17,zmm10,0x10
        vpslldq zmm10,zmm10,4

        vpternlogq      zmm10,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[448+rsp],zmm10

        vpclmulqdq      zmm13,zmm12,zmm9,0x11
        vpclmulqdq      zmm15,zmm12,zmm9,0x00
        vpclmulqdq      zmm17,zmm12,zmm9,0x01
        vpclmulqdq      zmm12,zmm12,zmm9,0x10
        vpxorq  zmm12,zmm12,zmm17

        vpsrldq zmm17,zmm12,8
        vpslldq zmm12,zmm12,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm12,zmm12,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm12,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm12,zmm12,zmm15



        vpclmulqdq      zmm15,zmm17,zmm12,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm12,zmm17,zmm12,0x10
        vpslldq zmm12,zmm12,4

        vpternlogq      zmm12,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[384+rsp],zmm12

        vpclmulqdq      zmm13,zmm10,zmm9,0x11
        vpclmulqdq      zmm15,zmm10,zmm9,0x00
        vpclmulqdq      zmm17,zmm10,zmm9,0x01
        vpclmulqdq      zmm10,zmm10,zmm9,0x10
        vpxorq  zmm10,zmm10,zmm17

        vpsrldq zmm17,zmm10,8
        vpslldq zmm10,zmm10,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm10,zmm10,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm10,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm10,zmm10,zmm15



        vpclmulqdq      zmm15,zmm17,zmm10,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm10,zmm17,zmm10,0x10
        vpslldq zmm10,zmm10,4

        vpternlogq      zmm10,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[320+rsp],zmm10

        vpclmulqdq      zmm13,zmm12,zmm9,0x11
        vpclmulqdq      zmm15,zmm12,zmm9,0x00
        vpclmulqdq      zmm17,zmm12,zmm9,0x01
        vpclmulqdq      zmm12,zmm12,zmm9,0x10
        vpxorq  zmm12,zmm12,zmm17

        vpsrldq zmm17,zmm12,8
        vpslldq zmm12,zmm12,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm12,zmm12,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm12,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm12,zmm12,zmm15



        vpclmulqdq      zmm15,zmm17,zmm12,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm12,zmm17,zmm12,0x10
        vpslldq zmm12,zmm12,4

        vpternlogq      zmm12,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[256+rsp],zmm12

        vpclmulqdq      zmm13,zmm10,zmm9,0x11
        vpclmulqdq      zmm15,zmm10,zmm9,0x00
        vpclmulqdq      zmm17,zmm10,zmm9,0x01
        vpclmulqdq      zmm10,zmm10,zmm9,0x10
        vpxorq  zmm10,zmm10,zmm17

        vpsrldq zmm17,zmm10,8
        vpslldq zmm10,zmm10,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm10,zmm10,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm10,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm10,zmm10,zmm15



        vpclmulqdq      zmm15,zmm17,zmm10,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm10,zmm17,zmm10,0x10
        vpslldq zmm10,zmm10,4

        vpternlogq      zmm10,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[192+rsp],zmm10

        vpclmulqdq      zmm13,zmm12,zmm9,0x11
        vpclmulqdq      zmm15,zmm12,zmm9,0x00
        vpclmulqdq      zmm17,zmm12,zmm9,0x01
        vpclmulqdq      zmm12,zmm12,zmm9,0x10
        vpxorq  zmm12,zmm12,zmm17

        vpsrldq zmm17,zmm12,8
        vpslldq zmm12,zmm12,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm12,zmm12,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm12,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm12,zmm12,zmm15



        vpclmulqdq      zmm15,zmm17,zmm12,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm12,zmm17,zmm12,0x10
        vpslldq zmm12,zmm12,4

        vpternlogq      zmm12,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[128+rsp],zmm12

        vpclmulqdq      zmm13,zmm10,zmm9,0x11
        vpclmulqdq      zmm15,zmm10,zmm9,0x00
        vpclmulqdq      zmm17,zmm10,zmm9,0x01
        vpclmulqdq      zmm10,zmm10,zmm9,0x10
        vpxorq  zmm10,zmm10,zmm17

        vpsrldq zmm17,zmm10,8
        vpslldq zmm10,zmm10,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm10,zmm10,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm10,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm10,zmm10,zmm15



        vpclmulqdq      zmm15,zmm17,zmm10,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm10,zmm17,zmm10,0x10
        vpslldq zmm10,zmm10,4

        vpternlogq      zmm10,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[64+rsp],zmm10

        vpclmulqdq      zmm13,zmm12,zmm9,0x11
        vpclmulqdq      zmm15,zmm12,zmm9,0x00
        vpclmulqdq      zmm17,zmm12,zmm9,0x01
        vpclmulqdq      zmm12,zmm12,zmm9,0x10
        vpxorq  zmm12,zmm12,zmm17

        vpsrldq zmm17,zmm12,8
        vpslldq zmm12,zmm12,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm12,zmm12,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm12,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm12,zmm12,zmm15



        vpclmulqdq      zmm15,zmm17,zmm12,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm12,zmm17,zmm12,0x10
        vpslldq zmm12,zmm12,4

        vpternlogq      zmm12,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[rsp],zmm12
$L$_skip_hkeys_precomputation_2:
        mov     rbx,1
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       zmm19,ZMMWORD[rsp]
        vpclmulqdq      zmm1,zmm11,zmm19,0x11
        vpclmulqdq      zmm9,zmm11,zmm19,0x00
        vpclmulqdq      zmm10,zmm11,zmm19,0x01
        vpclmulqdq      zmm12,zmm11,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[64+rsp]
        vpclmulqdq      zmm13,zmm3,zmm19,0x11
        vpclmulqdq      zmm15,zmm3,zmm19,0x00
        vpclmulqdq      zmm17,zmm3,zmm19,0x01
        vpclmulqdq      zmm18,zmm3,zmm19,0x10
        vpxorq  zmm7,zmm10,zmm17
        vpxorq  zmm6,zmm1,zmm13
        vpxorq  zmm8,zmm9,zmm15
        vpternlogq      zmm7,zmm12,zmm18,0x96
        vmovdqu64       zmm19,ZMMWORD[128+rsp]
        vpclmulqdq      zmm1,zmm4,zmm19,0x11
        vpclmulqdq      zmm9,zmm4,zmm19,0x00
        vpclmulqdq      zmm10,zmm4,zmm19,0x01
        vpclmulqdq      zmm12,zmm4,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[192+rsp]
        vpclmulqdq      zmm13,zmm5,zmm19,0x11
        vpclmulqdq      zmm15,zmm5,zmm19,0x00
        vpclmulqdq      zmm17,zmm5,zmm19,0x01
        vpclmulqdq      zmm18,zmm5,zmm19,0x10

        vpternlogq      zmm7,zmm10,zmm17,0x96
        vpternlogq      zmm6,zmm1,zmm13,0x96
        vpternlogq      zmm8,zmm9,zmm15,0x96
        vpternlogq      zmm7,zmm12,zmm18,0x96
        vmovdqu64       zmm11,ZMMWORD[256+r10]
        vmovdqu64       zmm3,ZMMWORD[320+r10]
        vmovdqu64       zmm4,ZMMWORD[384+r10]
        vmovdqu64       zmm5,ZMMWORD[448+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb zmm5,zmm5,zmm16
        vmovdqu64       zmm19,ZMMWORD[256+rsp]
        vpclmulqdq      zmm1,zmm11,zmm19,0x11
        vpclmulqdq      zmm9,zmm11,zmm19,0x00
        vpclmulqdq      zmm10,zmm11,zmm19,0x01
        vpclmulqdq      zmm12,zmm11,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[320+rsp]
        vpclmulqdq      zmm13,zmm3,zmm19,0x11
        vpclmulqdq      zmm15,zmm3,zmm19,0x00
        vpclmulqdq      zmm17,zmm3,zmm19,0x01
        vpclmulqdq      zmm18,zmm3,zmm19,0x10
        vpternlogq      zmm7,zmm10,zmm17,0x96
        vpternlogq      zmm6,zmm1,zmm13,0x96
        vpternlogq      zmm8,zmm9,zmm15,0x96
        vpternlogq      zmm7,zmm12,zmm18,0x96
        vmovdqu64       zmm19,ZMMWORD[384+rsp]
        vpclmulqdq      zmm1,zmm4,zmm19,0x11
        vpclmulqdq      zmm9,zmm4,zmm19,0x00
        vpclmulqdq      zmm10,zmm4,zmm19,0x01
        vpclmulqdq      zmm12,zmm4,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[448+rsp]
        vpclmulqdq      zmm13,zmm5,zmm19,0x11
        vpclmulqdq      zmm15,zmm5,zmm19,0x00
        vpclmulqdq      zmm17,zmm5,zmm19,0x01
        vpclmulqdq      zmm18,zmm5,zmm19,0x10

        vpternlogq      zmm7,zmm10,zmm17,0x96
        vpternlogq      zmm6,zmm1,zmm13,0x96
        vpternlogq      zmm8,zmm9,zmm15,0x96
        vpternlogq      zmm7,zmm12,zmm18,0x96
        vmovdqu64       zmm11,ZMMWORD[512+r10]
        vmovdqu64       zmm3,ZMMWORD[576+r10]
        vmovdqu64       zmm4,ZMMWORD[640+r10]
        vmovdqu64       zmm5,ZMMWORD[704+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb zmm5,zmm5,zmm16
        vmovdqu64       zmm19,ZMMWORD[512+rsp]
        vpclmulqdq      zmm1,zmm11,zmm19,0x11
        vpclmulqdq      zmm9,zmm11,zmm19,0x00
        vpclmulqdq      zmm10,zmm11,zmm19,0x01
        vpclmulqdq      zmm12,zmm11,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[576+rsp]
        vpclmulqdq      zmm13,zmm3,zmm19,0x11
        vpclmulqdq      zmm15,zmm3,zmm19,0x00
        vpclmulqdq      zmm17,zmm3,zmm19,0x01
        vpclmulqdq      zmm18,zmm3,zmm19,0x10
        vpternlogq      zmm7,zmm10,zmm17,0x96
        vpternlogq      zmm6,zmm1,zmm13,0x96
        vpternlogq      zmm8,zmm9,zmm15,0x96
        vpternlogq      zmm7,zmm12,zmm18,0x96
        vmovdqu64       zmm19,ZMMWORD[640+rsp]
        vpclmulqdq      zmm1,zmm4,zmm19,0x11
        vpclmulqdq      zmm9,zmm4,zmm19,0x00
        vpclmulqdq      zmm10,zmm4,zmm19,0x01
        vpclmulqdq      zmm12,zmm4,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[704+rsp]
        vpclmulqdq      zmm13,zmm5,zmm19,0x11
        vpclmulqdq      zmm15,zmm5,zmm19,0x00
        vpclmulqdq      zmm17,zmm5,zmm19,0x01
        vpclmulqdq      zmm18,zmm5,zmm19,0x10

        vpternlogq      zmm7,zmm10,zmm17,0x96
        vpternlogq      zmm6,zmm1,zmm13,0x96
        vpternlogq      zmm8,zmm9,zmm15,0x96
        vpternlogq      zmm7,zmm12,zmm18,0x96

        vpsrldq zmm1,zmm7,8
        vpslldq zmm9,zmm7,8
        vpxorq  zmm6,zmm6,zmm1
        vpxorq  zmm8,zmm8,zmm9
        vextracti64x4   ymm1,zmm6,1
        vpxorq  ymm6,ymm6,ymm1
        vextracti32x4   xmm1,ymm6,1
        vpxorq  xmm6,xmm6,xmm1
        vextracti64x4   ymm9,zmm8,1
        vpxorq  ymm8,ymm8,ymm9
        vextracti32x4   xmm9,ymm8,1
        vpxorq  xmm8,xmm8,xmm9
        vmovdqa64       xmm10,XMMWORD[POLY2]


        vpclmulqdq      xmm1,xmm10,xmm8,0x01
        vpslldq xmm1,xmm1,8
        vpxorq  xmm1,xmm8,xmm1


        vpclmulqdq      xmm9,xmm10,xmm1,0x00
        vpsrldq xmm9,xmm9,4
        vpclmulqdq      xmm2,xmm10,xmm1,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm9,xmm6,0x96

        sub     r11,768
        je      NEAR $L$_CALC_AAD_done_1

        add     r10,768
        jmp     NEAR $L$_get_AAD_loop48x16_1

$L$_exit_AAD_loop48x16_1:

        cmp     r11,512
        jl      NEAR $L$_less_than_32x16_1

        vmovdqu64       zmm11,ZMMWORD[r10]
        vmovdqu64       zmm3,ZMMWORD[64+r10]
        vmovdqu64       zmm4,ZMMWORD[128+r10]
        vmovdqu64       zmm5,ZMMWORD[192+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb zmm5,zmm5,zmm16
        test    rbx,rbx
        jnz     NEAR $L$_skip_hkeys_precomputation_3

        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vmovdqu64       ZMMWORD[704+rsp],zmm1

        vmovdqu64       zmm9,ZMMWORD[224+rdx]
        vmovdqu64       ZMMWORD[640+rsp],zmm9


        vshufi64x2      zmm9,zmm9,zmm9,0x00

        vmovdqu64       zmm10,ZMMWORD[160+rdx]
        vmovdqu64       ZMMWORD[576+rsp],zmm10

        vmovdqu64       zmm12,ZMMWORD[96+rdx]
        vmovdqu64       ZMMWORD[512+rsp],zmm12

        vpclmulqdq      zmm13,zmm10,zmm9,0x11
        vpclmulqdq      zmm15,zmm10,zmm9,0x00
        vpclmulqdq      zmm17,zmm10,zmm9,0x01
        vpclmulqdq      zmm10,zmm10,zmm9,0x10
        vpxorq  zmm10,zmm10,zmm17

        vpsrldq zmm17,zmm10,8
        vpslldq zmm10,zmm10,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm10,zmm10,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm10,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm10,zmm10,zmm15



        vpclmulqdq      zmm15,zmm17,zmm10,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm10,zmm17,zmm10,0x10
        vpslldq zmm10,zmm10,4

        vpternlogq      zmm10,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[448+rsp],zmm10

        vpclmulqdq      zmm13,zmm12,zmm9,0x11
        vpclmulqdq      zmm15,zmm12,zmm9,0x00
        vpclmulqdq      zmm17,zmm12,zmm9,0x01
        vpclmulqdq      zmm12,zmm12,zmm9,0x10
        vpxorq  zmm12,zmm12,zmm17

        vpsrldq zmm17,zmm12,8
        vpslldq zmm12,zmm12,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm12,zmm12,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm12,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm12,zmm12,zmm15



        vpclmulqdq      zmm15,zmm17,zmm12,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm12,zmm17,zmm12,0x10
        vpslldq zmm12,zmm12,4

        vpternlogq      zmm12,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[384+rsp],zmm12

        vpclmulqdq      zmm13,zmm10,zmm9,0x11
        vpclmulqdq      zmm15,zmm10,zmm9,0x00
        vpclmulqdq      zmm17,zmm10,zmm9,0x01
        vpclmulqdq      zmm10,zmm10,zmm9,0x10
        vpxorq  zmm10,zmm10,zmm17

        vpsrldq zmm17,zmm10,8
        vpslldq zmm10,zmm10,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm10,zmm10,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm10,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm10,zmm10,zmm15



        vpclmulqdq      zmm15,zmm17,zmm10,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm10,zmm17,zmm10,0x10
        vpslldq zmm10,zmm10,4

        vpternlogq      zmm10,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[320+rsp],zmm10

        vpclmulqdq      zmm13,zmm12,zmm9,0x11
        vpclmulqdq      zmm15,zmm12,zmm9,0x00
        vpclmulqdq      zmm17,zmm12,zmm9,0x01
        vpclmulqdq      zmm12,zmm12,zmm9,0x10
        vpxorq  zmm12,zmm12,zmm17

        vpsrldq zmm17,zmm12,8
        vpslldq zmm12,zmm12,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm12,zmm12,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm12,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm12,zmm12,zmm15



        vpclmulqdq      zmm15,zmm17,zmm12,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm12,zmm17,zmm12,0x10
        vpslldq zmm12,zmm12,4

        vpternlogq      zmm12,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[256+rsp],zmm12
$L$_skip_hkeys_precomputation_3:
        mov     rbx,1
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       zmm19,ZMMWORD[256+rsp]
        vpclmulqdq      zmm1,zmm11,zmm19,0x11
        vpclmulqdq      zmm9,zmm11,zmm19,0x00
        vpclmulqdq      zmm10,zmm11,zmm19,0x01
        vpclmulqdq      zmm12,zmm11,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[320+rsp]
        vpclmulqdq      zmm13,zmm3,zmm19,0x11
        vpclmulqdq      zmm15,zmm3,zmm19,0x00
        vpclmulqdq      zmm17,zmm3,zmm19,0x01
        vpclmulqdq      zmm18,zmm3,zmm19,0x10
        vpxorq  zmm7,zmm10,zmm17
        vpxorq  zmm6,zmm1,zmm13
        vpxorq  zmm8,zmm9,zmm15
        vpternlogq      zmm7,zmm12,zmm18,0x96
        vmovdqu64       zmm19,ZMMWORD[384+rsp]
        vpclmulqdq      zmm1,zmm4,zmm19,0x11
        vpclmulqdq      zmm9,zmm4,zmm19,0x00
        vpclmulqdq      zmm10,zmm4,zmm19,0x01
        vpclmulqdq      zmm12,zmm4,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[448+rsp]
        vpclmulqdq      zmm13,zmm5,zmm19,0x11
        vpclmulqdq      zmm15,zmm5,zmm19,0x00
        vpclmulqdq      zmm17,zmm5,zmm19,0x01
        vpclmulqdq      zmm18,zmm5,zmm19,0x10

        vpternlogq      zmm7,zmm10,zmm17,0x96
        vpternlogq      zmm6,zmm1,zmm13,0x96
        vpternlogq      zmm8,zmm9,zmm15,0x96
        vpternlogq      zmm7,zmm12,zmm18,0x96
        vmovdqu64       zmm11,ZMMWORD[256+r10]
        vmovdqu64       zmm3,ZMMWORD[320+r10]
        vmovdqu64       zmm4,ZMMWORD[384+r10]
        vmovdqu64       zmm5,ZMMWORD[448+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb zmm5,zmm5,zmm16
        vmovdqu64       zmm19,ZMMWORD[512+rsp]
        vpclmulqdq      zmm1,zmm11,zmm19,0x11
        vpclmulqdq      zmm9,zmm11,zmm19,0x00
        vpclmulqdq      zmm10,zmm11,zmm19,0x01
        vpclmulqdq      zmm12,zmm11,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[576+rsp]
        vpclmulqdq      zmm13,zmm3,zmm19,0x11
        vpclmulqdq      zmm15,zmm3,zmm19,0x00
        vpclmulqdq      zmm17,zmm3,zmm19,0x01
        vpclmulqdq      zmm18,zmm3,zmm19,0x10
        vpternlogq      zmm7,zmm10,zmm17,0x96
        vpternlogq      zmm6,zmm1,zmm13,0x96
        vpternlogq      zmm8,zmm9,zmm15,0x96
        vpternlogq      zmm7,zmm12,zmm18,0x96
        vmovdqu64       zmm19,ZMMWORD[640+rsp]
        vpclmulqdq      zmm1,zmm4,zmm19,0x11
        vpclmulqdq      zmm9,zmm4,zmm19,0x00
        vpclmulqdq      zmm10,zmm4,zmm19,0x01
        vpclmulqdq      zmm12,zmm4,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[704+rsp]
        vpclmulqdq      zmm13,zmm5,zmm19,0x11
        vpclmulqdq      zmm15,zmm5,zmm19,0x00
        vpclmulqdq      zmm17,zmm5,zmm19,0x01
        vpclmulqdq      zmm18,zmm5,zmm19,0x10

        vpternlogq      zmm7,zmm10,zmm17,0x96
        vpternlogq      zmm6,zmm1,zmm13,0x96
        vpternlogq      zmm8,zmm9,zmm15,0x96
        vpternlogq      zmm7,zmm12,zmm18,0x96

        vpsrldq zmm1,zmm7,8
        vpslldq zmm9,zmm7,8
        vpxorq  zmm6,zmm6,zmm1
        vpxorq  zmm8,zmm8,zmm9
        vextracti64x4   ymm1,zmm6,1
        vpxorq  ymm6,ymm6,ymm1
        vextracti32x4   xmm1,ymm6,1
        vpxorq  xmm6,xmm6,xmm1
        vextracti64x4   ymm9,zmm8,1
        vpxorq  ymm8,ymm8,ymm9
        vextracti32x4   xmm9,ymm8,1
        vpxorq  xmm8,xmm8,xmm9
        vmovdqa64       xmm10,XMMWORD[POLY2]


        vpclmulqdq      xmm1,xmm10,xmm8,0x01
        vpslldq xmm1,xmm1,8
        vpxorq  xmm1,xmm8,xmm1


        vpclmulqdq      xmm9,xmm10,xmm1,0x00
        vpsrldq xmm9,xmm9,4
        vpclmulqdq      xmm2,xmm10,xmm1,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm9,xmm6,0x96

        sub     r11,512
        je      NEAR $L$_CALC_AAD_done_1

        add     r10,512
        jmp     NEAR $L$_less_than_16x16_1

$L$_less_than_32x16_1:
        cmp     r11,256
        jl      NEAR $L$_less_than_16x16_1

        vmovdqu64       zmm11,ZMMWORD[r10]
        vmovdqu64       zmm3,ZMMWORD[64+r10]
        vmovdqu64       zmm4,ZMMWORD[128+r10]
        vmovdqu64       zmm5,ZMMWORD[192+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb zmm5,zmm5,zmm16
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       zmm19,ZMMWORD[96+rdx]
        vpclmulqdq      zmm1,zmm11,zmm19,0x11
        vpclmulqdq      zmm9,zmm11,zmm19,0x00
        vpclmulqdq      zmm10,zmm11,zmm19,0x01
        vpclmulqdq      zmm12,zmm11,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[160+rdx]
        vpclmulqdq      zmm13,zmm3,zmm19,0x11
        vpclmulqdq      zmm15,zmm3,zmm19,0x00
        vpclmulqdq      zmm17,zmm3,zmm19,0x01
        vpclmulqdq      zmm18,zmm3,zmm19,0x10
        vpxorq  zmm7,zmm10,zmm17
        vpxorq  zmm6,zmm1,zmm13
        vpxorq  zmm8,zmm9,zmm15
        vpternlogq      zmm7,zmm12,zmm18,0x96
        vmovdqu64       zmm19,ZMMWORD[224+rdx]
        vpclmulqdq      zmm1,zmm4,zmm19,0x11
        vpclmulqdq      zmm9,zmm4,zmm19,0x00
        vpclmulqdq      zmm10,zmm4,zmm19,0x01
        vpclmulqdq      zmm12,zmm4,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[288+rdx]
        vpclmulqdq      zmm13,zmm5,zmm19,0x11
        vpclmulqdq      zmm15,zmm5,zmm19,0x00
        vpclmulqdq      zmm17,zmm5,zmm19,0x01
        vpclmulqdq      zmm18,zmm5,zmm19,0x10

        vpternlogq      zmm7,zmm10,zmm17,0x96
        vpternlogq      zmm6,zmm1,zmm13,0x96
        vpternlogq      zmm8,zmm9,zmm15,0x96
        vpternlogq      zmm7,zmm12,zmm18,0x96

        vpsrldq zmm1,zmm7,8
        vpslldq zmm9,zmm7,8
        vpxorq  zmm6,zmm6,zmm1
        vpxorq  zmm8,zmm8,zmm9
        vextracti64x4   ymm1,zmm6,1
        vpxorq  ymm6,ymm6,ymm1
        vextracti32x4   xmm1,ymm6,1
        vpxorq  xmm6,xmm6,xmm1
        vextracti64x4   ymm9,zmm8,1
        vpxorq  ymm8,ymm8,ymm9
        vextracti32x4   xmm9,ymm8,1
        vpxorq  xmm8,xmm8,xmm9
        vmovdqa64       xmm10,XMMWORD[POLY2]


        vpclmulqdq      xmm1,xmm10,xmm8,0x01
        vpslldq xmm1,xmm1,8
        vpxorq  xmm1,xmm8,xmm1


        vpclmulqdq      xmm9,xmm10,xmm1,0x00
        vpsrldq xmm9,xmm9,4
        vpclmulqdq      xmm2,xmm10,xmm1,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm9,xmm6,0x96

        sub     r11,256
        je      NEAR $L$_CALC_AAD_done_1

        add     r10,256

$L$_less_than_16x16_1:

        lea     r12,[byte64_len_to_mask_table]
        lea     r12,[r11*8+r12]


        add     r11d,15
        shr     r11d,4
        cmp     r11d,2
        jb      NEAR $L$_AAD_blocks_1_1
        je      NEAR $L$_AAD_blocks_2_1
        cmp     r11d,4
        jb      NEAR $L$_AAD_blocks_3_1
        je      NEAR $L$_AAD_blocks_4_1
        cmp     r11d,6
        jb      NEAR $L$_AAD_blocks_5_1
        je      NEAR $L$_AAD_blocks_6_1
        cmp     r11d,8
        jb      NEAR $L$_AAD_blocks_7_1
        je      NEAR $L$_AAD_blocks_8_1
        cmp     r11d,10
        jb      NEAR $L$_AAD_blocks_9_1
        je      NEAR $L$_AAD_blocks_10_1
        cmp     r11d,12
        jb      NEAR $L$_AAD_blocks_11_1
        je      NEAR $L$_AAD_blocks_12_1
        cmp     r11d,14
        jb      NEAR $L$_AAD_blocks_13_1
        je      NEAR $L$_AAD_blocks_14_1
        cmp     r11d,15
        je      NEAR $L$_AAD_blocks_15_1
$L$_AAD_blocks_16_1:
        sub     r12,1536
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3,ZMMWORD[64+r10]
        vmovdqu8        zmm4,ZMMWORD[128+r10]
        vmovdqu8        zmm5{k1}{z},[192+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb zmm5,zmm5,zmm16
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       zmm15,ZMMWORD[96+rdx]
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[160+rdx]
        vpclmulqdq      zmm9,zmm3,zmm15,0x11
        vpclmulqdq      zmm10,zmm3,zmm15,0x00
        vpclmulqdq      zmm12,zmm3,zmm15,0x01
        vpclmulqdq      zmm13,zmm3,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[224+rdx]
        vpclmulqdq      zmm11,zmm4,zmm15,0x11
        vpclmulqdq      zmm3,zmm4,zmm15,0x00
        vpternlogq      zmm1,zmm11,zmm9,0x96
        vpternlogq      zmm6,zmm3,zmm10,0x96
        vpclmulqdq      zmm11,zmm4,zmm15,0x01
        vpclmulqdq      zmm3,zmm4,zmm15,0x10
        vpternlogq      zmm7,zmm11,zmm12,0x96
        vpternlogq      zmm8,zmm3,zmm13,0x96
        vmovdqu64       zmm15,ZMMWORD[288+rdx]
        vpclmulqdq      zmm9,zmm5,zmm15,0x11
        vpclmulqdq      zmm10,zmm5,zmm15,0x00
        vpclmulqdq      zmm12,zmm5,zmm15,0x01
        vpclmulqdq      zmm13,zmm5,zmm15,0x10
        vpxorq  zmm9,zmm1,zmm9
        vpxorq  zmm10,zmm6,zmm10
        vpxorq  zmm12,zmm7,zmm12
        vpxorq  zmm13,zmm8,zmm13

        vpxorq  zmm12,zmm12,zmm13
        vpsrldq zmm7,zmm12,8
        vpslldq zmm8,zmm12,8
        vpxorq  zmm1,zmm9,zmm7
        vpxorq  zmm6,zmm10,zmm8
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm2,xmm15,xmm7,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_1
$L$_AAD_blocks_15_1:
        sub     r12,1536
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3,ZMMWORD[64+r10]
        vmovdqu8        zmm4,ZMMWORD[128+r10]
        vmovdqu8        zmm5{k1}{z},[192+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb zmm5,zmm5,zmm16
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       zmm15,ZMMWORD[112+rdx]
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[176+rdx]
        vpclmulqdq      zmm9,zmm3,zmm15,0x11
        vpclmulqdq      zmm10,zmm3,zmm15,0x00
        vpclmulqdq      zmm12,zmm3,zmm15,0x01
        vpclmulqdq      zmm13,zmm3,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[240+rdx]
        vpclmulqdq      zmm11,zmm4,zmm15,0x11
        vpclmulqdq      zmm3,zmm4,zmm15,0x00
        vpternlogq      zmm9,zmm11,zmm1,0x96
        vpternlogq      zmm10,zmm3,zmm6,0x96
        vpclmulqdq      zmm11,zmm4,zmm15,0x01
        vpclmulqdq      zmm3,zmm4,zmm15,0x10
        vpternlogq      zmm12,zmm11,zmm7,0x96
        vpternlogq      zmm13,zmm3,zmm8,0x96
        vmovdqu64       ymm15,YMMWORD[304+rdx]
        vinserti64x2    zmm15,zmm15,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm7,zmm5,zmm15,0x01
        vpclmulqdq      zmm8,zmm5,zmm15,0x10
        vpclmulqdq      zmm1,zmm5,zmm15,0x11
        vpclmulqdq      zmm6,zmm5,zmm15,0x00

        vpxorq  zmm7,zmm7,zmm12
        vpxorq  zmm8,zmm8,zmm13
        vpxorq  zmm1,zmm1,zmm9
        vpxorq  zmm6,zmm6,zmm10

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm2,xmm15,xmm7,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_1
$L$_AAD_blocks_14_1:
        sub     r12,1536
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3,ZMMWORD[64+r10]
        vmovdqu8        zmm4,ZMMWORD[128+r10]
        vmovdqu8        ymm5{k1}{z},[192+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb ymm5,ymm5,ymm16
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       zmm15,ZMMWORD[128+rdx]
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[192+rdx]
        vpclmulqdq      zmm9,zmm3,zmm15,0x11
        vpclmulqdq      zmm10,zmm3,zmm15,0x00
        vpclmulqdq      zmm12,zmm3,zmm15,0x01
        vpclmulqdq      zmm13,zmm3,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[256+rdx]
        vpclmulqdq      zmm11,zmm4,zmm15,0x11
        vpclmulqdq      zmm3,zmm4,zmm15,0x00
        vpternlogq      zmm9,zmm11,zmm1,0x96
        vpternlogq      zmm10,zmm3,zmm6,0x96
        vpclmulqdq      zmm11,zmm4,zmm15,0x01
        vpclmulqdq      zmm3,zmm4,zmm15,0x10
        vpternlogq      zmm12,zmm11,zmm7,0x96
        vpternlogq      zmm13,zmm3,zmm8,0x96
        vmovdqu64       ymm15,YMMWORD[320+rdx]
        vpclmulqdq      ymm7,ymm5,ymm15,0x01
        vpclmulqdq      ymm8,ymm5,ymm15,0x10
        vpclmulqdq      ymm1,ymm5,ymm15,0x11
        vpclmulqdq      ymm6,ymm5,ymm15,0x00

        vpxorq  zmm7,zmm7,zmm12
        vpxorq  zmm8,zmm8,zmm13
        vpxorq  zmm1,zmm1,zmm9
        vpxorq  zmm6,zmm6,zmm10

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm2,xmm15,xmm7,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_1
$L$_AAD_blocks_13_1:
        sub     r12,1536
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3,ZMMWORD[64+r10]
        vmovdqu8        zmm4,ZMMWORD[128+r10]
        vmovdqu8        xmm5{k1}{z},[192+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb xmm5,xmm5,xmm16
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       zmm15,ZMMWORD[144+rdx]
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[208+rdx]
        vpclmulqdq      zmm9,zmm3,zmm15,0x11
        vpclmulqdq      zmm10,zmm3,zmm15,0x00
        vpclmulqdq      zmm12,zmm3,zmm15,0x01
        vpclmulqdq      zmm13,zmm3,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[272+rdx]
        vpclmulqdq      zmm11,zmm4,zmm15,0x11
        vpclmulqdq      zmm3,zmm4,zmm15,0x00
        vpternlogq      zmm9,zmm11,zmm1,0x96
        vpternlogq      zmm10,zmm3,zmm6,0x96
        vpclmulqdq      zmm11,zmm4,zmm15,0x01
        vpclmulqdq      zmm3,zmm4,zmm15,0x10
        vpternlogq      zmm12,zmm11,zmm7,0x96
        vpternlogq      zmm13,zmm3,zmm8,0x96
        vmovdqu64       xmm15,XMMWORD[336+rdx]
        vpclmulqdq      xmm7,xmm5,xmm15,0x01
        vpclmulqdq      xmm8,xmm5,xmm15,0x10
        vpclmulqdq      xmm1,xmm5,xmm15,0x11
        vpclmulqdq      xmm6,xmm5,xmm15,0x00

        vpxorq  zmm7,zmm7,zmm12
        vpxorq  zmm8,zmm8,zmm13
        vpxorq  zmm1,zmm1,zmm9
        vpxorq  zmm6,zmm6,zmm10

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm2,xmm15,xmm7,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_1
$L$_AAD_blocks_12_1:
        sub     r12,1024
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3,ZMMWORD[64+r10]
        vmovdqu8        zmm4{k1}{z},[128+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       zmm15,ZMMWORD[160+rdx]
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[224+rdx]
        vpclmulqdq      zmm9,zmm3,zmm15,0x11
        vpclmulqdq      zmm10,zmm3,zmm15,0x00
        vpclmulqdq      zmm12,zmm3,zmm15,0x01
        vpclmulqdq      zmm13,zmm3,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[288+rdx]
        vpclmulqdq      zmm11,zmm4,zmm15,0x11
        vpclmulqdq      zmm3,zmm4,zmm15,0x00
        vpternlogq      zmm9,zmm11,zmm1,0x96
        vpternlogq      zmm10,zmm3,zmm6,0x96
        vpclmulqdq      zmm11,zmm4,zmm15,0x01
        vpclmulqdq      zmm3,zmm4,zmm15,0x10
        vpternlogq      zmm12,zmm11,zmm7,0x96
        vpternlogq      zmm13,zmm3,zmm8,0x96

        vpxorq  zmm12,zmm12,zmm13
        vpsrldq zmm7,zmm12,8
        vpslldq zmm8,zmm12,8
        vpxorq  zmm1,zmm9,zmm7
        vpxorq  zmm6,zmm10,zmm8
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm2,xmm15,xmm7,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_1
$L$_AAD_blocks_11_1:
        sub     r12,1024
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3,ZMMWORD[64+r10]
        vmovdqu8        zmm4{k1}{z},[128+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       zmm15,ZMMWORD[176+rdx]
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[240+rdx]
        vpclmulqdq      zmm9,zmm3,zmm15,0x11
        vpclmulqdq      zmm10,zmm3,zmm15,0x00
        vpclmulqdq      zmm12,zmm3,zmm15,0x01
        vpclmulqdq      zmm13,zmm3,zmm15,0x10
        vpxorq  zmm9,zmm1,zmm9
        vpxorq  zmm10,zmm6,zmm10
        vpxorq  zmm12,zmm7,zmm12
        vpxorq  zmm13,zmm8,zmm13
        vmovdqu64       ymm15,YMMWORD[304+rdx]
        vinserti64x2    zmm15,zmm15,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm7,zmm4,zmm15,0x01
        vpclmulqdq      zmm8,zmm4,zmm15,0x10
        vpclmulqdq      zmm1,zmm4,zmm15,0x11
        vpclmulqdq      zmm6,zmm4,zmm15,0x00

        vpxorq  zmm7,zmm7,zmm12
        vpxorq  zmm8,zmm8,zmm13
        vpxorq  zmm1,zmm1,zmm9
        vpxorq  zmm6,zmm6,zmm10

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm2,xmm15,xmm7,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_1
$L$_AAD_blocks_10_1:
        sub     r12,1024
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3,ZMMWORD[64+r10]
        vmovdqu8        ymm4{k1}{z},[128+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb ymm4,ymm4,ymm16
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       zmm15,ZMMWORD[192+rdx]
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[256+rdx]
        vpclmulqdq      zmm9,zmm3,zmm15,0x11
        vpclmulqdq      zmm10,zmm3,zmm15,0x00
        vpclmulqdq      zmm12,zmm3,zmm15,0x01
        vpclmulqdq      zmm13,zmm3,zmm15,0x10
        vpxorq  zmm9,zmm1,zmm9
        vpxorq  zmm10,zmm6,zmm10
        vpxorq  zmm12,zmm7,zmm12
        vpxorq  zmm13,zmm8,zmm13
        vmovdqu64       ymm15,YMMWORD[320+rdx]
        vpclmulqdq      ymm7,ymm4,ymm15,0x01
        vpclmulqdq      ymm8,ymm4,ymm15,0x10
        vpclmulqdq      ymm1,ymm4,ymm15,0x11
        vpclmulqdq      ymm6,ymm4,ymm15,0x00

        vpxorq  zmm7,zmm7,zmm12
        vpxorq  zmm8,zmm8,zmm13
        vpxorq  zmm1,zmm1,zmm9
        vpxorq  zmm6,zmm6,zmm10

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm2,xmm15,xmm7,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_1
$L$_AAD_blocks_9_1:
        sub     r12,1024
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3,ZMMWORD[64+r10]
        vmovdqu8        xmm4{k1}{z},[128+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb xmm4,xmm4,xmm16
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       zmm15,ZMMWORD[208+rdx]
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[272+rdx]
        vpclmulqdq      zmm9,zmm3,zmm15,0x11
        vpclmulqdq      zmm10,zmm3,zmm15,0x00
        vpclmulqdq      zmm12,zmm3,zmm15,0x01
        vpclmulqdq      zmm13,zmm3,zmm15,0x10
        vpxorq  zmm9,zmm1,zmm9
        vpxorq  zmm10,zmm6,zmm10
        vpxorq  zmm12,zmm7,zmm12
        vpxorq  zmm13,zmm8,zmm13
        vmovdqu64       xmm15,XMMWORD[336+rdx]
        vpclmulqdq      xmm7,xmm4,xmm15,0x01
        vpclmulqdq      xmm8,xmm4,xmm15,0x10
        vpclmulqdq      xmm1,xmm4,xmm15,0x11
        vpclmulqdq      xmm6,xmm4,xmm15,0x00

        vpxorq  zmm7,zmm7,zmm12
        vpxorq  zmm8,zmm8,zmm13
        vpxorq  zmm1,zmm1,zmm9
        vpxorq  zmm6,zmm6,zmm10

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm2,xmm15,xmm7,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_1
$L$_AAD_blocks_8_1:
        sub     r12,512
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3{k1}{z},[64+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       zmm15,ZMMWORD[224+rdx]
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[288+rdx]
        vpclmulqdq      zmm9,zmm3,zmm15,0x11
        vpclmulqdq      zmm10,zmm3,zmm15,0x00
        vpclmulqdq      zmm12,zmm3,zmm15,0x01
        vpclmulqdq      zmm13,zmm3,zmm15,0x10
        vpxorq  zmm9,zmm1,zmm9
        vpxorq  zmm10,zmm6,zmm10
        vpxorq  zmm12,zmm7,zmm12
        vpxorq  zmm13,zmm8,zmm13

        vpxorq  zmm12,zmm12,zmm13
        vpsrldq zmm7,zmm12,8
        vpslldq zmm8,zmm12,8
        vpxorq  zmm1,zmm9,zmm7
        vpxorq  zmm6,zmm10,zmm8
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm2,xmm15,xmm7,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_1
$L$_AAD_blocks_7_1:
        sub     r12,512
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3{k1}{z},[64+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       zmm15,ZMMWORD[240+rdx]
        vpclmulqdq      zmm9,zmm11,zmm15,0x11
        vpclmulqdq      zmm10,zmm11,zmm15,0x00
        vpclmulqdq      zmm12,zmm11,zmm15,0x01
        vpclmulqdq      zmm13,zmm11,zmm15,0x10
        vmovdqu64       ymm15,YMMWORD[304+rdx]
        vinserti64x2    zmm15,zmm15,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm7,zmm3,zmm15,0x01
        vpclmulqdq      zmm8,zmm3,zmm15,0x10
        vpclmulqdq      zmm1,zmm3,zmm15,0x11
        vpclmulqdq      zmm6,zmm3,zmm15,0x00

        vpxorq  zmm7,zmm7,zmm12
        vpxorq  zmm8,zmm8,zmm13
        vpxorq  zmm1,zmm1,zmm9
        vpxorq  zmm6,zmm6,zmm10

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm2,xmm15,xmm7,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_1
$L$_AAD_blocks_6_1:
        sub     r12,512
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        ymm3{k1}{z},[64+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb ymm3,ymm3,ymm16
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       zmm15,ZMMWORD[256+rdx]
        vpclmulqdq      zmm9,zmm11,zmm15,0x11
        vpclmulqdq      zmm10,zmm11,zmm15,0x00
        vpclmulqdq      zmm12,zmm11,zmm15,0x01
        vpclmulqdq      zmm13,zmm11,zmm15,0x10
        vmovdqu64       ymm15,YMMWORD[320+rdx]
        vpclmulqdq      ymm7,ymm3,ymm15,0x01
        vpclmulqdq      ymm8,ymm3,ymm15,0x10
        vpclmulqdq      ymm1,ymm3,ymm15,0x11
        vpclmulqdq      ymm6,ymm3,ymm15,0x00

        vpxorq  zmm7,zmm7,zmm12
        vpxorq  zmm8,zmm8,zmm13
        vpxorq  zmm1,zmm1,zmm9
        vpxorq  zmm6,zmm6,zmm10

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm2,xmm15,xmm7,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_1
$L$_AAD_blocks_5_1:
        sub     r12,512
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        xmm3{k1}{z},[64+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb xmm3,xmm3,xmm16
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       zmm15,ZMMWORD[272+rdx]
        vpclmulqdq      zmm9,zmm11,zmm15,0x11
        vpclmulqdq      zmm10,zmm11,zmm15,0x00
        vpclmulqdq      zmm12,zmm11,zmm15,0x01
        vpclmulqdq      zmm13,zmm11,zmm15,0x10
        vmovdqu64       xmm15,XMMWORD[336+rdx]
        vpclmulqdq      xmm7,xmm3,xmm15,0x01
        vpclmulqdq      xmm8,xmm3,xmm15,0x10
        vpclmulqdq      xmm1,xmm3,xmm15,0x11
        vpclmulqdq      xmm6,xmm3,xmm15,0x00

        vpxorq  zmm7,zmm7,zmm12
        vpxorq  zmm8,zmm8,zmm13
        vpxorq  zmm1,zmm1,zmm9
        vpxorq  zmm6,zmm6,zmm10

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm2,xmm15,xmm7,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_1
$L$_AAD_blocks_4_1:
        kmovq   k1,[r12]
        vmovdqu8        zmm11{k1}{z},[r10]
        vpshufb zmm11,zmm11,zmm16
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       zmm15,ZMMWORD[288+rdx]
        vpclmulqdq      zmm9,zmm11,zmm15,0x11
        vpclmulqdq      zmm10,zmm11,zmm15,0x00
        vpclmulqdq      zmm12,zmm11,zmm15,0x01
        vpclmulqdq      zmm13,zmm11,zmm15,0x10

        vpxorq  zmm12,zmm12,zmm13
        vpsrldq zmm7,zmm12,8
        vpslldq zmm8,zmm12,8
        vpxorq  zmm1,zmm9,zmm7
        vpxorq  zmm6,zmm10,zmm8
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm2,xmm15,xmm7,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_1
$L$_AAD_blocks_3_1:
        kmovq   k1,[r12]
        vmovdqu8        zmm11{k1}{z},[r10]
        vpshufb zmm11,zmm11,zmm16
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       ymm15,YMMWORD[304+rdx]
        vinserti64x2    zmm15,zmm15,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm2,xmm15,xmm7,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_1
$L$_AAD_blocks_2_1:
        kmovq   k1,[r12]
        vmovdqu8        ymm11{k1}{z},[r10]
        vpshufb ymm11,ymm11,ymm16
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       ymm15,YMMWORD[320+rdx]
        vpclmulqdq      ymm7,ymm11,ymm15,0x01
        vpclmulqdq      ymm8,ymm11,ymm15,0x10
        vpclmulqdq      ymm1,ymm11,ymm15,0x11
        vpclmulqdq      ymm6,ymm11,ymm15,0x00

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm2,xmm15,xmm7,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_1
$L$_AAD_blocks_1_1:
        kmovq   k1,[r12]
        vmovdqu8        xmm11{k1}{z},[r10]
        vpshufb xmm11,xmm11,xmm16
        vpxorq  zmm11,zmm11,zmm2
        vmovdqu64       xmm15,XMMWORD[336+rdx]
        vpclmulqdq      xmm7,xmm11,xmm15,0x01
        vpclmulqdq      xmm8,xmm11,xmm15,0x10
        vpclmulqdq      xmm1,xmm11,xmm15,0x11
        vpclmulqdq      xmm6,xmm11,xmm15,0x00

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm2,xmm15,xmm7,0x10
        vpslldq xmm2,xmm2,4
        vpternlogq      xmm2,xmm8,xmm1,0x96

$L$_CALC_AAD_done_1:
        mov     r10,r9
        shl     r10,3
        vmovq   xmm3,r10


        vpxorq  xmm2,xmm3,xmm2

        vmovdqu64       xmm1,XMMWORD[336+rdx]

        vpclmulqdq      xmm11,xmm2,xmm1,0x11
        vpclmulqdq      xmm3,xmm2,xmm1,0x00
        vpclmulqdq      xmm4,xmm2,xmm1,0x01
        vpclmulqdq      xmm2,xmm2,xmm1,0x10
        vpxorq  xmm2,xmm2,xmm4

        vpsrldq xmm4,xmm2,8
        vpslldq xmm2,xmm2,8
        vpxorq  xmm11,xmm11,xmm4
        vpxorq  xmm2,xmm2,xmm3



        vmovdqu64       xmm4,XMMWORD[POLY2]

        vpclmulqdq      xmm3,xmm4,xmm2,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm2,xmm2,xmm3



        vpclmulqdq      xmm3,xmm4,xmm2,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm2,xmm4,xmm2,0x10
        vpslldq xmm2,xmm2,4

        vpternlogq      xmm2,xmm11,xmm3,0x96

        vpshufb xmm2,xmm2,XMMWORD[SHUF_MASK]
        jmp     NEAR skip_iv_len_12_init_IV
iv_len_12_init_IV:

        vmovdqu8        xmm2,XMMWORD[ONEf]
        mov     r11,r8
        mov     r10d,0x0000000000000fff
        kmovq   k1,r10
        vmovdqu8        xmm2{k1},[r11]
skip_iv_len_12_init_IV:
        vmovdqu xmm1,xmm2


        mov     r10d,DWORD[240+rcx]
        cmp     r10d,9
        je      NEAR $L$aes_128_4
        cmp     r10d,11
        je      NEAR $L$aes_192_4
        cmp     r10d,13
        je      NEAR $L$aes_256_4
        jmp     NEAR $L$exit_aes_4
ALIGN   32
$L$aes_128_4:
        vpxorq  xmm1,xmm1,XMMWORD[rcx]

        vaesenc xmm1,xmm1,XMMWORD[16+rcx]

        vaesenc xmm1,xmm1,XMMWORD[32+rcx]

        vaesenc xmm1,xmm1,XMMWORD[48+rcx]

        vaesenc xmm1,xmm1,XMMWORD[64+rcx]

        vaesenc xmm1,xmm1,XMMWORD[80+rcx]

        vaesenc xmm1,xmm1,XMMWORD[96+rcx]

        vaesenc xmm1,xmm1,XMMWORD[112+rcx]

        vaesenc xmm1,xmm1,XMMWORD[128+rcx]

        vaesenc xmm1,xmm1,XMMWORD[144+rcx]

        vaesenclast     xmm1,xmm1,XMMWORD[160+rcx]
        jmp     NEAR $L$exit_aes_4
ALIGN   32
$L$aes_192_4:
        vpxorq  xmm1,xmm1,XMMWORD[rcx]

        vaesenc xmm1,xmm1,XMMWORD[16+rcx]

        vaesenc xmm1,xmm1,XMMWORD[32+rcx]

        vaesenc xmm1,xmm1,XMMWORD[48+rcx]

        vaesenc xmm1,xmm1,XMMWORD[64+rcx]

        vaesenc xmm1,xmm1,XMMWORD[80+rcx]

        vaesenc xmm1,xmm1,XMMWORD[96+rcx]

        vaesenc xmm1,xmm1,XMMWORD[112+rcx]

        vaesenc xmm1,xmm1,XMMWORD[128+rcx]

        vaesenc xmm1,xmm1,XMMWORD[144+rcx]

        vaesenc xmm1,xmm1,XMMWORD[160+rcx]

        vaesenc xmm1,xmm1,XMMWORD[176+rcx]

        vaesenclast     xmm1,xmm1,XMMWORD[192+rcx]
        jmp     NEAR $L$exit_aes_4
ALIGN   32
$L$aes_256_4:
        vpxorq  xmm1,xmm1,XMMWORD[rcx]

        vaesenc xmm1,xmm1,XMMWORD[16+rcx]

        vaesenc xmm1,xmm1,XMMWORD[32+rcx]

        vaesenc xmm1,xmm1,XMMWORD[48+rcx]

        vaesenc xmm1,xmm1,XMMWORD[64+rcx]

        vaesenc xmm1,xmm1,XMMWORD[80+rcx]

        vaesenc xmm1,xmm1,XMMWORD[96+rcx]

        vaesenc xmm1,xmm1,XMMWORD[112+rcx]

        vaesenc xmm1,xmm1,XMMWORD[128+rcx]

        vaesenc xmm1,xmm1,XMMWORD[144+rcx]

        vaesenc xmm1,xmm1,XMMWORD[160+rcx]

        vaesenc xmm1,xmm1,XMMWORD[176+rcx]

        vaesenc xmm1,xmm1,XMMWORD[192+rcx]

        vaesenc xmm1,xmm1,XMMWORD[208+rcx]

        vaesenclast     xmm1,xmm1,XMMWORD[224+rcx]
        jmp     NEAR $L$exit_aes_4
$L$exit_aes_4:

        vmovdqu XMMWORD[32+rdx],xmm1


        vpshufb xmm2,xmm2,XMMWORD[SHUF_MASK]
        vmovdqu XMMWORD[rdx],xmm2
        cmp     r9,256
        jbe     NEAR $L$skip_hkeys_cleanup_5
        vpxor   xmm0,xmm0,xmm0
        vmovdqa64       ZMMWORD[rsp],zmm0
        vmovdqa64       ZMMWORD[64+rsp],zmm0
        vmovdqa64       ZMMWORD[128+rsp],zmm0
        vmovdqa64       ZMMWORD[192+rsp],zmm0
        vmovdqa64       ZMMWORD[256+rsp],zmm0
        vmovdqa64       ZMMWORD[320+rsp],zmm0
        vmovdqa64       ZMMWORD[384+rsp],zmm0
        vmovdqa64       ZMMWORD[448+rsp],zmm0
        vmovdqa64       ZMMWORD[512+rsp],zmm0
        vmovdqa64       ZMMWORD[576+rsp],zmm0
        vmovdqa64       ZMMWORD[640+rsp],zmm0
        vmovdqa64       ZMMWORD[704+rsp],zmm0
$L$skip_hkeys_cleanup_5:
        vzeroupper
        vmovdqu xmm15,XMMWORD[((-16))+rbp]
        vmovdqu xmm14,XMMWORD[((-32))+rbp]
        vmovdqu xmm13,XMMWORD[((-48))+rbp]
        vmovdqu xmm12,XMMWORD[((-64))+rbp]
        vmovdqu xmm11,XMMWORD[((-80))+rbp]
        vmovdqu xmm10,XMMWORD[((-96))+rbp]
        vmovdqu xmm9,XMMWORD[((-112))+rbp]
        vmovdqu xmm8,XMMWORD[((-128))+rbp]
        vmovdqu xmm7,XMMWORD[((-144))+rbp]
        vmovdqu xmm6,XMMWORD[((-160))+rbp]
        lea     rsp,[8+rbp]
        pop     rsi

        pop     rdi

        pop     r15

        pop     r14

        pop     r13

        pop     r12

        pop     rbp

        pop     rbx

$L$abort_setiv:
        DB      0F3h,0C3h               ;repret
$L$setiv_seh_end:


global  ossl_aes_gcm_update_aad_avx512

ALIGN   32
ossl_aes_gcm_update_aad_avx512:

$L$ghash_seh_begin:
DB      243,15,30,250
        push    rbx

$L$ghash_seh_push_rbx:
        push    rbp

$L$ghash_seh_push_rbp:
        push    r12

$L$ghash_seh_push_r12:
        push    r13

$L$ghash_seh_push_r13:
        push    r14

$L$ghash_seh_push_r14:
        push    r15

$L$ghash_seh_push_r15:
        push    rdi
$L$ghash_seh_push_rdi:
        push    rsi
$L$ghash_seh_push_rsi:

        sub     rsp,168
$L$ghash_seh_allocstack_xmm:










        lea     rbp,[160+rsp]

$L$ghash_seh_setfp:
        vmovdqu XMMWORD[rsp],xmm6
$L$ghash_seh_save_xmm6:
        vmovdqu XMMWORD[16+rsp],xmm7
$L$ghash_seh_save_xmm7:
        vmovdqu XMMWORD[32+rsp],xmm8
$L$ghash_seh_save_xmm8:
        vmovdqu XMMWORD[48+rsp],xmm9
$L$ghash_seh_save_xmm9:
        vmovdqu XMMWORD[64+rsp],xmm10
$L$ghash_seh_save_xmm10:
        vmovdqu XMMWORD[80+rsp],xmm11
$L$ghash_seh_save_xmm11:
        vmovdqu XMMWORD[96+rsp],xmm12
$L$ghash_seh_save_xmm12:
        vmovdqu XMMWORD[112+rsp],xmm13
$L$ghash_seh_save_xmm13:
        vmovdqu XMMWORD[128+rsp],xmm14
$L$ghash_seh_save_xmm14:
        vmovdqu XMMWORD[144+rsp],xmm15
$L$ghash_seh_save_xmm15:

$L$ghash_seh_prolog_end:
        sub     rsp,816
        and     rsp,(-64)
        vmovdqu64       xmm14,XMMWORD[64+rcx]
        mov     r10,rdx
        mov     r11,r8
        or      r11,r11
        jz      NEAR $L$_CALC_AAD_done_6

        xor     rbx,rbx
        vmovdqa64       zmm16,ZMMWORD[SHUF_MASK]

$L$_get_AAD_loop48x16_6:
        cmp     r11,768
        jl      NEAR $L$_exit_AAD_loop48x16_6
        vmovdqu64       zmm11,ZMMWORD[r10]
        vmovdqu64       zmm3,ZMMWORD[64+r10]
        vmovdqu64       zmm4,ZMMWORD[128+r10]
        vmovdqu64       zmm5,ZMMWORD[192+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb zmm5,zmm5,zmm16
        test    rbx,rbx
        jnz     NEAR $L$_skip_hkeys_precomputation_7

        vmovdqu64       zmm1,ZMMWORD[288+rcx]
        vmovdqu64       ZMMWORD[704+rsp],zmm1

        vmovdqu64       zmm9,ZMMWORD[224+rcx]
        vmovdqu64       ZMMWORD[640+rsp],zmm9


        vshufi64x2      zmm9,zmm9,zmm9,0x00

        vmovdqu64       zmm10,ZMMWORD[160+rcx]
        vmovdqu64       ZMMWORD[576+rsp],zmm10

        vmovdqu64       zmm12,ZMMWORD[96+rcx]
        vmovdqu64       ZMMWORD[512+rsp],zmm12

        vpclmulqdq      zmm13,zmm10,zmm9,0x11
        vpclmulqdq      zmm15,zmm10,zmm9,0x00
        vpclmulqdq      zmm17,zmm10,zmm9,0x01
        vpclmulqdq      zmm10,zmm10,zmm9,0x10
        vpxorq  zmm10,zmm10,zmm17

        vpsrldq zmm17,zmm10,8
        vpslldq zmm10,zmm10,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm10,zmm10,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm10,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm10,zmm10,zmm15



        vpclmulqdq      zmm15,zmm17,zmm10,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm10,zmm17,zmm10,0x10
        vpslldq zmm10,zmm10,4

        vpternlogq      zmm10,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[448+rsp],zmm10

        vpclmulqdq      zmm13,zmm12,zmm9,0x11
        vpclmulqdq      zmm15,zmm12,zmm9,0x00
        vpclmulqdq      zmm17,zmm12,zmm9,0x01
        vpclmulqdq      zmm12,zmm12,zmm9,0x10
        vpxorq  zmm12,zmm12,zmm17

        vpsrldq zmm17,zmm12,8
        vpslldq zmm12,zmm12,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm12,zmm12,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm12,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm12,zmm12,zmm15



        vpclmulqdq      zmm15,zmm17,zmm12,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm12,zmm17,zmm12,0x10
        vpslldq zmm12,zmm12,4

        vpternlogq      zmm12,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[384+rsp],zmm12

        vpclmulqdq      zmm13,zmm10,zmm9,0x11
        vpclmulqdq      zmm15,zmm10,zmm9,0x00
        vpclmulqdq      zmm17,zmm10,zmm9,0x01
        vpclmulqdq      zmm10,zmm10,zmm9,0x10
        vpxorq  zmm10,zmm10,zmm17

        vpsrldq zmm17,zmm10,8
        vpslldq zmm10,zmm10,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm10,zmm10,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm10,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm10,zmm10,zmm15



        vpclmulqdq      zmm15,zmm17,zmm10,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm10,zmm17,zmm10,0x10
        vpslldq zmm10,zmm10,4

        vpternlogq      zmm10,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[320+rsp],zmm10

        vpclmulqdq      zmm13,zmm12,zmm9,0x11
        vpclmulqdq      zmm15,zmm12,zmm9,0x00
        vpclmulqdq      zmm17,zmm12,zmm9,0x01
        vpclmulqdq      zmm12,zmm12,zmm9,0x10
        vpxorq  zmm12,zmm12,zmm17

        vpsrldq zmm17,zmm12,8
        vpslldq zmm12,zmm12,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm12,zmm12,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm12,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm12,zmm12,zmm15



        vpclmulqdq      zmm15,zmm17,zmm12,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm12,zmm17,zmm12,0x10
        vpslldq zmm12,zmm12,4

        vpternlogq      zmm12,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[256+rsp],zmm12

        vpclmulqdq      zmm13,zmm10,zmm9,0x11
        vpclmulqdq      zmm15,zmm10,zmm9,0x00
        vpclmulqdq      zmm17,zmm10,zmm9,0x01
        vpclmulqdq      zmm10,zmm10,zmm9,0x10
        vpxorq  zmm10,zmm10,zmm17

        vpsrldq zmm17,zmm10,8
        vpslldq zmm10,zmm10,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm10,zmm10,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm10,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm10,zmm10,zmm15



        vpclmulqdq      zmm15,zmm17,zmm10,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm10,zmm17,zmm10,0x10
        vpslldq zmm10,zmm10,4

        vpternlogq      zmm10,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[192+rsp],zmm10

        vpclmulqdq      zmm13,zmm12,zmm9,0x11
        vpclmulqdq      zmm15,zmm12,zmm9,0x00
        vpclmulqdq      zmm17,zmm12,zmm9,0x01
        vpclmulqdq      zmm12,zmm12,zmm9,0x10
        vpxorq  zmm12,zmm12,zmm17

        vpsrldq zmm17,zmm12,8
        vpslldq zmm12,zmm12,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm12,zmm12,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm12,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm12,zmm12,zmm15



        vpclmulqdq      zmm15,zmm17,zmm12,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm12,zmm17,zmm12,0x10
        vpslldq zmm12,zmm12,4

        vpternlogq      zmm12,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[128+rsp],zmm12

        vpclmulqdq      zmm13,zmm10,zmm9,0x11
        vpclmulqdq      zmm15,zmm10,zmm9,0x00
        vpclmulqdq      zmm17,zmm10,zmm9,0x01
        vpclmulqdq      zmm10,zmm10,zmm9,0x10
        vpxorq  zmm10,zmm10,zmm17

        vpsrldq zmm17,zmm10,8
        vpslldq zmm10,zmm10,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm10,zmm10,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm10,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm10,zmm10,zmm15



        vpclmulqdq      zmm15,zmm17,zmm10,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm10,zmm17,zmm10,0x10
        vpslldq zmm10,zmm10,4

        vpternlogq      zmm10,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[64+rsp],zmm10

        vpclmulqdq      zmm13,zmm12,zmm9,0x11
        vpclmulqdq      zmm15,zmm12,zmm9,0x00
        vpclmulqdq      zmm17,zmm12,zmm9,0x01
        vpclmulqdq      zmm12,zmm12,zmm9,0x10
        vpxorq  zmm12,zmm12,zmm17

        vpsrldq zmm17,zmm12,8
        vpslldq zmm12,zmm12,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm12,zmm12,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm12,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm12,zmm12,zmm15



        vpclmulqdq      zmm15,zmm17,zmm12,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm12,zmm17,zmm12,0x10
        vpslldq zmm12,zmm12,4

        vpternlogq      zmm12,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[rsp],zmm12
$L$_skip_hkeys_precomputation_7:
        mov     rbx,1
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       zmm19,ZMMWORD[rsp]
        vpclmulqdq      zmm1,zmm11,zmm19,0x11
        vpclmulqdq      zmm9,zmm11,zmm19,0x00
        vpclmulqdq      zmm10,zmm11,zmm19,0x01
        vpclmulqdq      zmm12,zmm11,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[64+rsp]
        vpclmulqdq      zmm13,zmm3,zmm19,0x11
        vpclmulqdq      zmm15,zmm3,zmm19,0x00
        vpclmulqdq      zmm17,zmm3,zmm19,0x01
        vpclmulqdq      zmm18,zmm3,zmm19,0x10
        vpxorq  zmm7,zmm10,zmm17
        vpxorq  zmm6,zmm1,zmm13
        vpxorq  zmm8,zmm9,zmm15
        vpternlogq      zmm7,zmm12,zmm18,0x96
        vmovdqu64       zmm19,ZMMWORD[128+rsp]
        vpclmulqdq      zmm1,zmm4,zmm19,0x11
        vpclmulqdq      zmm9,zmm4,zmm19,0x00
        vpclmulqdq      zmm10,zmm4,zmm19,0x01
        vpclmulqdq      zmm12,zmm4,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[192+rsp]
        vpclmulqdq      zmm13,zmm5,zmm19,0x11
        vpclmulqdq      zmm15,zmm5,zmm19,0x00
        vpclmulqdq      zmm17,zmm5,zmm19,0x01
        vpclmulqdq      zmm18,zmm5,zmm19,0x10

        vpternlogq      zmm7,zmm10,zmm17,0x96
        vpternlogq      zmm6,zmm1,zmm13,0x96
        vpternlogq      zmm8,zmm9,zmm15,0x96
        vpternlogq      zmm7,zmm12,zmm18,0x96
        vmovdqu64       zmm11,ZMMWORD[256+r10]
        vmovdqu64       zmm3,ZMMWORD[320+r10]
        vmovdqu64       zmm4,ZMMWORD[384+r10]
        vmovdqu64       zmm5,ZMMWORD[448+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb zmm5,zmm5,zmm16
        vmovdqu64       zmm19,ZMMWORD[256+rsp]
        vpclmulqdq      zmm1,zmm11,zmm19,0x11
        vpclmulqdq      zmm9,zmm11,zmm19,0x00
        vpclmulqdq      zmm10,zmm11,zmm19,0x01
        vpclmulqdq      zmm12,zmm11,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[320+rsp]
        vpclmulqdq      zmm13,zmm3,zmm19,0x11
        vpclmulqdq      zmm15,zmm3,zmm19,0x00
        vpclmulqdq      zmm17,zmm3,zmm19,0x01
        vpclmulqdq      zmm18,zmm3,zmm19,0x10
        vpternlogq      zmm7,zmm10,zmm17,0x96
        vpternlogq      zmm6,zmm1,zmm13,0x96
        vpternlogq      zmm8,zmm9,zmm15,0x96
        vpternlogq      zmm7,zmm12,zmm18,0x96
        vmovdqu64       zmm19,ZMMWORD[384+rsp]
        vpclmulqdq      zmm1,zmm4,zmm19,0x11
        vpclmulqdq      zmm9,zmm4,zmm19,0x00
        vpclmulqdq      zmm10,zmm4,zmm19,0x01
        vpclmulqdq      zmm12,zmm4,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[448+rsp]
        vpclmulqdq      zmm13,zmm5,zmm19,0x11
        vpclmulqdq      zmm15,zmm5,zmm19,0x00
        vpclmulqdq      zmm17,zmm5,zmm19,0x01
        vpclmulqdq      zmm18,zmm5,zmm19,0x10

        vpternlogq      zmm7,zmm10,zmm17,0x96
        vpternlogq      zmm6,zmm1,zmm13,0x96
        vpternlogq      zmm8,zmm9,zmm15,0x96
        vpternlogq      zmm7,zmm12,zmm18,0x96
        vmovdqu64       zmm11,ZMMWORD[512+r10]
        vmovdqu64       zmm3,ZMMWORD[576+r10]
        vmovdqu64       zmm4,ZMMWORD[640+r10]
        vmovdqu64       zmm5,ZMMWORD[704+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb zmm5,zmm5,zmm16
        vmovdqu64       zmm19,ZMMWORD[512+rsp]
        vpclmulqdq      zmm1,zmm11,zmm19,0x11
        vpclmulqdq      zmm9,zmm11,zmm19,0x00
        vpclmulqdq      zmm10,zmm11,zmm19,0x01
        vpclmulqdq      zmm12,zmm11,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[576+rsp]
        vpclmulqdq      zmm13,zmm3,zmm19,0x11
        vpclmulqdq      zmm15,zmm3,zmm19,0x00
        vpclmulqdq      zmm17,zmm3,zmm19,0x01
        vpclmulqdq      zmm18,zmm3,zmm19,0x10
        vpternlogq      zmm7,zmm10,zmm17,0x96
        vpternlogq      zmm6,zmm1,zmm13,0x96
        vpternlogq      zmm8,zmm9,zmm15,0x96
        vpternlogq      zmm7,zmm12,zmm18,0x96
        vmovdqu64       zmm19,ZMMWORD[640+rsp]
        vpclmulqdq      zmm1,zmm4,zmm19,0x11
        vpclmulqdq      zmm9,zmm4,zmm19,0x00
        vpclmulqdq      zmm10,zmm4,zmm19,0x01
        vpclmulqdq      zmm12,zmm4,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[704+rsp]
        vpclmulqdq      zmm13,zmm5,zmm19,0x11
        vpclmulqdq      zmm15,zmm5,zmm19,0x00
        vpclmulqdq      zmm17,zmm5,zmm19,0x01
        vpclmulqdq      zmm18,zmm5,zmm19,0x10

        vpternlogq      zmm7,zmm10,zmm17,0x96
        vpternlogq      zmm6,zmm1,zmm13,0x96
        vpternlogq      zmm8,zmm9,zmm15,0x96
        vpternlogq      zmm7,zmm12,zmm18,0x96

        vpsrldq zmm1,zmm7,8
        vpslldq zmm9,zmm7,8
        vpxorq  zmm6,zmm6,zmm1
        vpxorq  zmm8,zmm8,zmm9
        vextracti64x4   ymm1,zmm6,1
        vpxorq  ymm6,ymm6,ymm1
        vextracti32x4   xmm1,ymm6,1
        vpxorq  xmm6,xmm6,xmm1
        vextracti64x4   ymm9,zmm8,1
        vpxorq  ymm8,ymm8,ymm9
        vextracti32x4   xmm9,ymm8,1
        vpxorq  xmm8,xmm8,xmm9
        vmovdqa64       xmm10,XMMWORD[POLY2]


        vpclmulqdq      xmm1,xmm10,xmm8,0x01
        vpslldq xmm1,xmm1,8
        vpxorq  xmm1,xmm8,xmm1


        vpclmulqdq      xmm9,xmm10,xmm1,0x00
        vpsrldq xmm9,xmm9,4
        vpclmulqdq      xmm14,xmm10,xmm1,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm9,xmm6,0x96

        sub     r11,768
        je      NEAR $L$_CALC_AAD_done_6

        add     r10,768
        jmp     NEAR $L$_get_AAD_loop48x16_6

$L$_exit_AAD_loop48x16_6:

        cmp     r11,512
        jl      NEAR $L$_less_than_32x16_6

        vmovdqu64       zmm11,ZMMWORD[r10]
        vmovdqu64       zmm3,ZMMWORD[64+r10]
        vmovdqu64       zmm4,ZMMWORD[128+r10]
        vmovdqu64       zmm5,ZMMWORD[192+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb zmm5,zmm5,zmm16
        test    rbx,rbx
        jnz     NEAR $L$_skip_hkeys_precomputation_8

        vmovdqu64       zmm1,ZMMWORD[288+rcx]
        vmovdqu64       ZMMWORD[704+rsp],zmm1

        vmovdqu64       zmm9,ZMMWORD[224+rcx]
        vmovdqu64       ZMMWORD[640+rsp],zmm9


        vshufi64x2      zmm9,zmm9,zmm9,0x00

        vmovdqu64       zmm10,ZMMWORD[160+rcx]
        vmovdqu64       ZMMWORD[576+rsp],zmm10

        vmovdqu64       zmm12,ZMMWORD[96+rcx]
        vmovdqu64       ZMMWORD[512+rsp],zmm12

        vpclmulqdq      zmm13,zmm10,zmm9,0x11
        vpclmulqdq      zmm15,zmm10,zmm9,0x00
        vpclmulqdq      zmm17,zmm10,zmm9,0x01
        vpclmulqdq      zmm10,zmm10,zmm9,0x10
        vpxorq  zmm10,zmm10,zmm17

        vpsrldq zmm17,zmm10,8
        vpslldq zmm10,zmm10,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm10,zmm10,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm10,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm10,zmm10,zmm15



        vpclmulqdq      zmm15,zmm17,zmm10,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm10,zmm17,zmm10,0x10
        vpslldq zmm10,zmm10,4

        vpternlogq      zmm10,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[448+rsp],zmm10

        vpclmulqdq      zmm13,zmm12,zmm9,0x11
        vpclmulqdq      zmm15,zmm12,zmm9,0x00
        vpclmulqdq      zmm17,zmm12,zmm9,0x01
        vpclmulqdq      zmm12,zmm12,zmm9,0x10
        vpxorq  zmm12,zmm12,zmm17

        vpsrldq zmm17,zmm12,8
        vpslldq zmm12,zmm12,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm12,zmm12,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm12,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm12,zmm12,zmm15



        vpclmulqdq      zmm15,zmm17,zmm12,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm12,zmm17,zmm12,0x10
        vpslldq zmm12,zmm12,4

        vpternlogq      zmm12,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[384+rsp],zmm12

        vpclmulqdq      zmm13,zmm10,zmm9,0x11
        vpclmulqdq      zmm15,zmm10,zmm9,0x00
        vpclmulqdq      zmm17,zmm10,zmm9,0x01
        vpclmulqdq      zmm10,zmm10,zmm9,0x10
        vpxorq  zmm10,zmm10,zmm17

        vpsrldq zmm17,zmm10,8
        vpslldq zmm10,zmm10,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm10,zmm10,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm10,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm10,zmm10,zmm15



        vpclmulqdq      zmm15,zmm17,zmm10,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm10,zmm17,zmm10,0x10
        vpslldq zmm10,zmm10,4

        vpternlogq      zmm10,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[320+rsp],zmm10

        vpclmulqdq      zmm13,zmm12,zmm9,0x11
        vpclmulqdq      zmm15,zmm12,zmm9,0x00
        vpclmulqdq      zmm17,zmm12,zmm9,0x01
        vpclmulqdq      zmm12,zmm12,zmm9,0x10
        vpxorq  zmm12,zmm12,zmm17

        vpsrldq zmm17,zmm12,8
        vpslldq zmm12,zmm12,8
        vpxorq  zmm13,zmm13,zmm17
        vpxorq  zmm12,zmm12,zmm15



        vmovdqu64       zmm17,ZMMWORD[POLY2]

        vpclmulqdq      zmm15,zmm17,zmm12,0x01
        vpslldq zmm15,zmm15,8
        vpxorq  zmm12,zmm12,zmm15



        vpclmulqdq      zmm15,zmm17,zmm12,0x00
        vpsrldq zmm15,zmm15,4
        vpclmulqdq      zmm12,zmm17,zmm12,0x10
        vpslldq zmm12,zmm12,4

        vpternlogq      zmm12,zmm13,zmm15,0x96

        vmovdqu64       ZMMWORD[256+rsp],zmm12
$L$_skip_hkeys_precomputation_8:
        mov     rbx,1
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       zmm19,ZMMWORD[256+rsp]
        vpclmulqdq      zmm1,zmm11,zmm19,0x11
        vpclmulqdq      zmm9,zmm11,zmm19,0x00
        vpclmulqdq      zmm10,zmm11,zmm19,0x01
        vpclmulqdq      zmm12,zmm11,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[320+rsp]
        vpclmulqdq      zmm13,zmm3,zmm19,0x11
        vpclmulqdq      zmm15,zmm3,zmm19,0x00
        vpclmulqdq      zmm17,zmm3,zmm19,0x01
        vpclmulqdq      zmm18,zmm3,zmm19,0x10
        vpxorq  zmm7,zmm10,zmm17
        vpxorq  zmm6,zmm1,zmm13
        vpxorq  zmm8,zmm9,zmm15
        vpternlogq      zmm7,zmm12,zmm18,0x96
        vmovdqu64       zmm19,ZMMWORD[384+rsp]
        vpclmulqdq      zmm1,zmm4,zmm19,0x11
        vpclmulqdq      zmm9,zmm4,zmm19,0x00
        vpclmulqdq      zmm10,zmm4,zmm19,0x01
        vpclmulqdq      zmm12,zmm4,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[448+rsp]
        vpclmulqdq      zmm13,zmm5,zmm19,0x11
        vpclmulqdq      zmm15,zmm5,zmm19,0x00
        vpclmulqdq      zmm17,zmm5,zmm19,0x01
        vpclmulqdq      zmm18,zmm5,zmm19,0x10

        vpternlogq      zmm7,zmm10,zmm17,0x96
        vpternlogq      zmm6,zmm1,zmm13,0x96
        vpternlogq      zmm8,zmm9,zmm15,0x96
        vpternlogq      zmm7,zmm12,zmm18,0x96
        vmovdqu64       zmm11,ZMMWORD[256+r10]
        vmovdqu64       zmm3,ZMMWORD[320+r10]
        vmovdqu64       zmm4,ZMMWORD[384+r10]
        vmovdqu64       zmm5,ZMMWORD[448+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb zmm5,zmm5,zmm16
        vmovdqu64       zmm19,ZMMWORD[512+rsp]
        vpclmulqdq      zmm1,zmm11,zmm19,0x11
        vpclmulqdq      zmm9,zmm11,zmm19,0x00
        vpclmulqdq      zmm10,zmm11,zmm19,0x01
        vpclmulqdq      zmm12,zmm11,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[576+rsp]
        vpclmulqdq      zmm13,zmm3,zmm19,0x11
        vpclmulqdq      zmm15,zmm3,zmm19,0x00
        vpclmulqdq      zmm17,zmm3,zmm19,0x01
        vpclmulqdq      zmm18,zmm3,zmm19,0x10
        vpternlogq      zmm7,zmm10,zmm17,0x96
        vpternlogq      zmm6,zmm1,zmm13,0x96
        vpternlogq      zmm8,zmm9,zmm15,0x96
        vpternlogq      zmm7,zmm12,zmm18,0x96
        vmovdqu64       zmm19,ZMMWORD[640+rsp]
        vpclmulqdq      zmm1,zmm4,zmm19,0x11
        vpclmulqdq      zmm9,zmm4,zmm19,0x00
        vpclmulqdq      zmm10,zmm4,zmm19,0x01
        vpclmulqdq      zmm12,zmm4,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[704+rsp]
        vpclmulqdq      zmm13,zmm5,zmm19,0x11
        vpclmulqdq      zmm15,zmm5,zmm19,0x00
        vpclmulqdq      zmm17,zmm5,zmm19,0x01
        vpclmulqdq      zmm18,zmm5,zmm19,0x10

        vpternlogq      zmm7,zmm10,zmm17,0x96
        vpternlogq      zmm6,zmm1,zmm13,0x96
        vpternlogq      zmm8,zmm9,zmm15,0x96
        vpternlogq      zmm7,zmm12,zmm18,0x96

        vpsrldq zmm1,zmm7,8
        vpslldq zmm9,zmm7,8
        vpxorq  zmm6,zmm6,zmm1
        vpxorq  zmm8,zmm8,zmm9
        vextracti64x4   ymm1,zmm6,1
        vpxorq  ymm6,ymm6,ymm1
        vextracti32x4   xmm1,ymm6,1
        vpxorq  xmm6,xmm6,xmm1
        vextracti64x4   ymm9,zmm8,1
        vpxorq  ymm8,ymm8,ymm9
        vextracti32x4   xmm9,ymm8,1
        vpxorq  xmm8,xmm8,xmm9
        vmovdqa64       xmm10,XMMWORD[POLY2]


        vpclmulqdq      xmm1,xmm10,xmm8,0x01
        vpslldq xmm1,xmm1,8
        vpxorq  xmm1,xmm8,xmm1


        vpclmulqdq      xmm9,xmm10,xmm1,0x00
        vpsrldq xmm9,xmm9,4
        vpclmulqdq      xmm14,xmm10,xmm1,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm9,xmm6,0x96

        sub     r11,512
        je      NEAR $L$_CALC_AAD_done_6

        add     r10,512
        jmp     NEAR $L$_less_than_16x16_6

$L$_less_than_32x16_6:
        cmp     r11,256
        jl      NEAR $L$_less_than_16x16_6

        vmovdqu64       zmm11,ZMMWORD[r10]
        vmovdqu64       zmm3,ZMMWORD[64+r10]
        vmovdqu64       zmm4,ZMMWORD[128+r10]
        vmovdqu64       zmm5,ZMMWORD[192+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb zmm5,zmm5,zmm16
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       zmm19,ZMMWORD[96+rcx]
        vpclmulqdq      zmm1,zmm11,zmm19,0x11
        vpclmulqdq      zmm9,zmm11,zmm19,0x00
        vpclmulqdq      zmm10,zmm11,zmm19,0x01
        vpclmulqdq      zmm12,zmm11,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[160+rcx]
        vpclmulqdq      zmm13,zmm3,zmm19,0x11
        vpclmulqdq      zmm15,zmm3,zmm19,0x00
        vpclmulqdq      zmm17,zmm3,zmm19,0x01
        vpclmulqdq      zmm18,zmm3,zmm19,0x10
        vpxorq  zmm7,zmm10,zmm17
        vpxorq  zmm6,zmm1,zmm13
        vpxorq  zmm8,zmm9,zmm15
        vpternlogq      zmm7,zmm12,zmm18,0x96
        vmovdqu64       zmm19,ZMMWORD[224+rcx]
        vpclmulqdq      zmm1,zmm4,zmm19,0x11
        vpclmulqdq      zmm9,zmm4,zmm19,0x00
        vpclmulqdq      zmm10,zmm4,zmm19,0x01
        vpclmulqdq      zmm12,zmm4,zmm19,0x10
        vmovdqu64       zmm19,ZMMWORD[288+rcx]
        vpclmulqdq      zmm13,zmm5,zmm19,0x11
        vpclmulqdq      zmm15,zmm5,zmm19,0x00
        vpclmulqdq      zmm17,zmm5,zmm19,0x01
        vpclmulqdq      zmm18,zmm5,zmm19,0x10

        vpternlogq      zmm7,zmm10,zmm17,0x96
        vpternlogq      zmm6,zmm1,zmm13,0x96
        vpternlogq      zmm8,zmm9,zmm15,0x96
        vpternlogq      zmm7,zmm12,zmm18,0x96

        vpsrldq zmm1,zmm7,8
        vpslldq zmm9,zmm7,8
        vpxorq  zmm6,zmm6,zmm1
        vpxorq  zmm8,zmm8,zmm9
        vextracti64x4   ymm1,zmm6,1
        vpxorq  ymm6,ymm6,ymm1
        vextracti32x4   xmm1,ymm6,1
        vpxorq  xmm6,xmm6,xmm1
        vextracti64x4   ymm9,zmm8,1
        vpxorq  ymm8,ymm8,ymm9
        vextracti32x4   xmm9,ymm8,1
        vpxorq  xmm8,xmm8,xmm9
        vmovdqa64       xmm10,XMMWORD[POLY2]


        vpclmulqdq      xmm1,xmm10,xmm8,0x01
        vpslldq xmm1,xmm1,8
        vpxorq  xmm1,xmm8,xmm1


        vpclmulqdq      xmm9,xmm10,xmm1,0x00
        vpsrldq xmm9,xmm9,4
        vpclmulqdq      xmm14,xmm10,xmm1,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm9,xmm6,0x96

        sub     r11,256
        je      NEAR $L$_CALC_AAD_done_6

        add     r10,256

$L$_less_than_16x16_6:

        lea     r12,[byte64_len_to_mask_table]
        lea     r12,[r11*8+r12]


        add     r11d,15
        shr     r11d,4
        cmp     r11d,2
        jb      NEAR $L$_AAD_blocks_1_6
        je      NEAR $L$_AAD_blocks_2_6
        cmp     r11d,4
        jb      NEAR $L$_AAD_blocks_3_6
        je      NEAR $L$_AAD_blocks_4_6
        cmp     r11d,6
        jb      NEAR $L$_AAD_blocks_5_6
        je      NEAR $L$_AAD_blocks_6_6
        cmp     r11d,8
        jb      NEAR $L$_AAD_blocks_7_6
        je      NEAR $L$_AAD_blocks_8_6
        cmp     r11d,10
        jb      NEAR $L$_AAD_blocks_9_6
        je      NEAR $L$_AAD_blocks_10_6
        cmp     r11d,12
        jb      NEAR $L$_AAD_blocks_11_6
        je      NEAR $L$_AAD_blocks_12_6
        cmp     r11d,14
        jb      NEAR $L$_AAD_blocks_13_6
        je      NEAR $L$_AAD_blocks_14_6
        cmp     r11d,15
        je      NEAR $L$_AAD_blocks_15_6
$L$_AAD_blocks_16_6:
        sub     r12,1536
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3,ZMMWORD[64+r10]
        vmovdqu8        zmm4,ZMMWORD[128+r10]
        vmovdqu8        zmm5{k1}{z},[192+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb zmm5,zmm5,zmm16
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       zmm15,ZMMWORD[96+rcx]
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[160+rcx]
        vpclmulqdq      zmm9,zmm3,zmm15,0x11
        vpclmulqdq      zmm10,zmm3,zmm15,0x00
        vpclmulqdq      zmm12,zmm3,zmm15,0x01
        vpclmulqdq      zmm13,zmm3,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[224+rcx]
        vpclmulqdq      zmm11,zmm4,zmm15,0x11
        vpclmulqdq      zmm3,zmm4,zmm15,0x00
        vpternlogq      zmm1,zmm11,zmm9,0x96
        vpternlogq      zmm6,zmm3,zmm10,0x96
        vpclmulqdq      zmm11,zmm4,zmm15,0x01
        vpclmulqdq      zmm3,zmm4,zmm15,0x10
        vpternlogq      zmm7,zmm11,zmm12,0x96
        vpternlogq      zmm8,zmm3,zmm13,0x96
        vmovdqu64       zmm15,ZMMWORD[288+rcx]
        vpclmulqdq      zmm9,zmm5,zmm15,0x11
        vpclmulqdq      zmm10,zmm5,zmm15,0x00
        vpclmulqdq      zmm12,zmm5,zmm15,0x01
        vpclmulqdq      zmm13,zmm5,zmm15,0x10
        vpxorq  zmm9,zmm1,zmm9
        vpxorq  zmm10,zmm6,zmm10
        vpxorq  zmm12,zmm7,zmm12
        vpxorq  zmm13,zmm8,zmm13

        vpxorq  zmm12,zmm12,zmm13
        vpsrldq zmm7,zmm12,8
        vpslldq zmm8,zmm12,8
        vpxorq  zmm1,zmm9,zmm7
        vpxorq  zmm6,zmm10,zmm8
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm14,xmm15,xmm7,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_6
$L$_AAD_blocks_15_6:
        sub     r12,1536
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3,ZMMWORD[64+r10]
        vmovdqu8        zmm4,ZMMWORD[128+r10]
        vmovdqu8        zmm5{k1}{z},[192+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb zmm5,zmm5,zmm16
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       zmm15,ZMMWORD[112+rcx]
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[176+rcx]
        vpclmulqdq      zmm9,zmm3,zmm15,0x11
        vpclmulqdq      zmm10,zmm3,zmm15,0x00
        vpclmulqdq      zmm12,zmm3,zmm15,0x01
        vpclmulqdq      zmm13,zmm3,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[240+rcx]
        vpclmulqdq      zmm11,zmm4,zmm15,0x11
        vpclmulqdq      zmm3,zmm4,zmm15,0x00
        vpternlogq      zmm9,zmm11,zmm1,0x96
        vpternlogq      zmm10,zmm3,zmm6,0x96
        vpclmulqdq      zmm11,zmm4,zmm15,0x01
        vpclmulqdq      zmm3,zmm4,zmm15,0x10
        vpternlogq      zmm12,zmm11,zmm7,0x96
        vpternlogq      zmm13,zmm3,zmm8,0x96
        vmovdqu64       ymm15,YMMWORD[304+rcx]
        vinserti64x2    zmm15,zmm15,ZMMWORD[336+rcx],2
        vpclmulqdq      zmm7,zmm5,zmm15,0x01
        vpclmulqdq      zmm8,zmm5,zmm15,0x10
        vpclmulqdq      zmm1,zmm5,zmm15,0x11
        vpclmulqdq      zmm6,zmm5,zmm15,0x00

        vpxorq  zmm7,zmm7,zmm12
        vpxorq  zmm8,zmm8,zmm13
        vpxorq  zmm1,zmm1,zmm9
        vpxorq  zmm6,zmm6,zmm10

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm14,xmm15,xmm7,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_6
$L$_AAD_blocks_14_6:
        sub     r12,1536
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3,ZMMWORD[64+r10]
        vmovdqu8        zmm4,ZMMWORD[128+r10]
        vmovdqu8        ymm5{k1}{z},[192+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb ymm5,ymm5,ymm16
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       zmm15,ZMMWORD[128+rcx]
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[192+rcx]
        vpclmulqdq      zmm9,zmm3,zmm15,0x11
        vpclmulqdq      zmm10,zmm3,zmm15,0x00
        vpclmulqdq      zmm12,zmm3,zmm15,0x01
        vpclmulqdq      zmm13,zmm3,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[256+rcx]
        vpclmulqdq      zmm11,zmm4,zmm15,0x11
        vpclmulqdq      zmm3,zmm4,zmm15,0x00
        vpternlogq      zmm9,zmm11,zmm1,0x96
        vpternlogq      zmm10,zmm3,zmm6,0x96
        vpclmulqdq      zmm11,zmm4,zmm15,0x01
        vpclmulqdq      zmm3,zmm4,zmm15,0x10
        vpternlogq      zmm12,zmm11,zmm7,0x96
        vpternlogq      zmm13,zmm3,zmm8,0x96
        vmovdqu64       ymm15,YMMWORD[320+rcx]
        vpclmulqdq      ymm7,ymm5,ymm15,0x01
        vpclmulqdq      ymm8,ymm5,ymm15,0x10
        vpclmulqdq      ymm1,ymm5,ymm15,0x11
        vpclmulqdq      ymm6,ymm5,ymm15,0x00

        vpxorq  zmm7,zmm7,zmm12
        vpxorq  zmm8,zmm8,zmm13
        vpxorq  zmm1,zmm1,zmm9
        vpxorq  zmm6,zmm6,zmm10

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm14,xmm15,xmm7,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_6
$L$_AAD_blocks_13_6:
        sub     r12,1536
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3,ZMMWORD[64+r10]
        vmovdqu8        zmm4,ZMMWORD[128+r10]
        vmovdqu8        xmm5{k1}{z},[192+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpshufb xmm5,xmm5,xmm16
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       zmm15,ZMMWORD[144+rcx]
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[208+rcx]
        vpclmulqdq      zmm9,zmm3,zmm15,0x11
        vpclmulqdq      zmm10,zmm3,zmm15,0x00
        vpclmulqdq      zmm12,zmm3,zmm15,0x01
        vpclmulqdq      zmm13,zmm3,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[272+rcx]
        vpclmulqdq      zmm11,zmm4,zmm15,0x11
        vpclmulqdq      zmm3,zmm4,zmm15,0x00
        vpternlogq      zmm9,zmm11,zmm1,0x96
        vpternlogq      zmm10,zmm3,zmm6,0x96
        vpclmulqdq      zmm11,zmm4,zmm15,0x01
        vpclmulqdq      zmm3,zmm4,zmm15,0x10
        vpternlogq      zmm12,zmm11,zmm7,0x96
        vpternlogq      zmm13,zmm3,zmm8,0x96
        vmovdqu64       xmm15,XMMWORD[336+rcx]
        vpclmulqdq      xmm7,xmm5,xmm15,0x01
        vpclmulqdq      xmm8,xmm5,xmm15,0x10
        vpclmulqdq      xmm1,xmm5,xmm15,0x11
        vpclmulqdq      xmm6,xmm5,xmm15,0x00

        vpxorq  zmm7,zmm7,zmm12
        vpxorq  zmm8,zmm8,zmm13
        vpxorq  zmm1,zmm1,zmm9
        vpxorq  zmm6,zmm6,zmm10

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm14,xmm15,xmm7,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_6
$L$_AAD_blocks_12_6:
        sub     r12,1024
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3,ZMMWORD[64+r10]
        vmovdqu8        zmm4{k1}{z},[128+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       zmm15,ZMMWORD[160+rcx]
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[224+rcx]
        vpclmulqdq      zmm9,zmm3,zmm15,0x11
        vpclmulqdq      zmm10,zmm3,zmm15,0x00
        vpclmulqdq      zmm12,zmm3,zmm15,0x01
        vpclmulqdq      zmm13,zmm3,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[288+rcx]
        vpclmulqdq      zmm11,zmm4,zmm15,0x11
        vpclmulqdq      zmm3,zmm4,zmm15,0x00
        vpternlogq      zmm9,zmm11,zmm1,0x96
        vpternlogq      zmm10,zmm3,zmm6,0x96
        vpclmulqdq      zmm11,zmm4,zmm15,0x01
        vpclmulqdq      zmm3,zmm4,zmm15,0x10
        vpternlogq      zmm12,zmm11,zmm7,0x96
        vpternlogq      zmm13,zmm3,zmm8,0x96

        vpxorq  zmm12,zmm12,zmm13
        vpsrldq zmm7,zmm12,8
        vpslldq zmm8,zmm12,8
        vpxorq  zmm1,zmm9,zmm7
        vpxorq  zmm6,zmm10,zmm8
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm14,xmm15,xmm7,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_6
$L$_AAD_blocks_11_6:
        sub     r12,1024
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3,ZMMWORD[64+r10]
        vmovdqu8        zmm4{k1}{z},[128+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb zmm4,zmm4,zmm16
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       zmm15,ZMMWORD[176+rcx]
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[240+rcx]
        vpclmulqdq      zmm9,zmm3,zmm15,0x11
        vpclmulqdq      zmm10,zmm3,zmm15,0x00
        vpclmulqdq      zmm12,zmm3,zmm15,0x01
        vpclmulqdq      zmm13,zmm3,zmm15,0x10
        vpxorq  zmm9,zmm1,zmm9
        vpxorq  zmm10,zmm6,zmm10
        vpxorq  zmm12,zmm7,zmm12
        vpxorq  zmm13,zmm8,zmm13
        vmovdqu64       ymm15,YMMWORD[304+rcx]
        vinserti64x2    zmm15,zmm15,ZMMWORD[336+rcx],2
        vpclmulqdq      zmm7,zmm4,zmm15,0x01
        vpclmulqdq      zmm8,zmm4,zmm15,0x10
        vpclmulqdq      zmm1,zmm4,zmm15,0x11
        vpclmulqdq      zmm6,zmm4,zmm15,0x00

        vpxorq  zmm7,zmm7,zmm12
        vpxorq  zmm8,zmm8,zmm13
        vpxorq  zmm1,zmm1,zmm9
        vpxorq  zmm6,zmm6,zmm10

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm14,xmm15,xmm7,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_6
$L$_AAD_blocks_10_6:
        sub     r12,1024
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3,ZMMWORD[64+r10]
        vmovdqu8        ymm4{k1}{z},[128+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb ymm4,ymm4,ymm16
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       zmm15,ZMMWORD[192+rcx]
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[256+rcx]
        vpclmulqdq      zmm9,zmm3,zmm15,0x11
        vpclmulqdq      zmm10,zmm3,zmm15,0x00
        vpclmulqdq      zmm12,zmm3,zmm15,0x01
        vpclmulqdq      zmm13,zmm3,zmm15,0x10
        vpxorq  zmm9,zmm1,zmm9
        vpxorq  zmm10,zmm6,zmm10
        vpxorq  zmm12,zmm7,zmm12
        vpxorq  zmm13,zmm8,zmm13
        vmovdqu64       ymm15,YMMWORD[320+rcx]
        vpclmulqdq      ymm7,ymm4,ymm15,0x01
        vpclmulqdq      ymm8,ymm4,ymm15,0x10
        vpclmulqdq      ymm1,ymm4,ymm15,0x11
        vpclmulqdq      ymm6,ymm4,ymm15,0x00

        vpxorq  zmm7,zmm7,zmm12
        vpxorq  zmm8,zmm8,zmm13
        vpxorq  zmm1,zmm1,zmm9
        vpxorq  zmm6,zmm6,zmm10

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm14,xmm15,xmm7,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_6
$L$_AAD_blocks_9_6:
        sub     r12,1024
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3,ZMMWORD[64+r10]
        vmovdqu8        xmm4{k1}{z},[128+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpshufb xmm4,xmm4,xmm16
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       zmm15,ZMMWORD[208+rcx]
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[272+rcx]
        vpclmulqdq      zmm9,zmm3,zmm15,0x11
        vpclmulqdq      zmm10,zmm3,zmm15,0x00
        vpclmulqdq      zmm12,zmm3,zmm15,0x01
        vpclmulqdq      zmm13,zmm3,zmm15,0x10
        vpxorq  zmm9,zmm1,zmm9
        vpxorq  zmm10,zmm6,zmm10
        vpxorq  zmm12,zmm7,zmm12
        vpxorq  zmm13,zmm8,zmm13
        vmovdqu64       xmm15,XMMWORD[336+rcx]
        vpclmulqdq      xmm7,xmm4,xmm15,0x01
        vpclmulqdq      xmm8,xmm4,xmm15,0x10
        vpclmulqdq      xmm1,xmm4,xmm15,0x11
        vpclmulqdq      xmm6,xmm4,xmm15,0x00

        vpxorq  zmm7,zmm7,zmm12
        vpxorq  zmm8,zmm8,zmm13
        vpxorq  zmm1,zmm1,zmm9
        vpxorq  zmm6,zmm6,zmm10

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm14,xmm15,xmm7,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_6
$L$_AAD_blocks_8_6:
        sub     r12,512
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3{k1}{z},[64+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       zmm15,ZMMWORD[224+rcx]
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vmovdqu64       zmm15,ZMMWORD[288+rcx]
        vpclmulqdq      zmm9,zmm3,zmm15,0x11
        vpclmulqdq      zmm10,zmm3,zmm15,0x00
        vpclmulqdq      zmm12,zmm3,zmm15,0x01
        vpclmulqdq      zmm13,zmm3,zmm15,0x10
        vpxorq  zmm9,zmm1,zmm9
        vpxorq  zmm10,zmm6,zmm10
        vpxorq  zmm12,zmm7,zmm12
        vpxorq  zmm13,zmm8,zmm13

        vpxorq  zmm12,zmm12,zmm13
        vpsrldq zmm7,zmm12,8
        vpslldq zmm8,zmm12,8
        vpxorq  zmm1,zmm9,zmm7
        vpxorq  zmm6,zmm10,zmm8
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm14,xmm15,xmm7,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_6
$L$_AAD_blocks_7_6:
        sub     r12,512
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        zmm3{k1}{z},[64+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb zmm3,zmm3,zmm16
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       zmm15,ZMMWORD[240+rcx]
        vpclmulqdq      zmm9,zmm11,zmm15,0x11
        vpclmulqdq      zmm10,zmm11,zmm15,0x00
        vpclmulqdq      zmm12,zmm11,zmm15,0x01
        vpclmulqdq      zmm13,zmm11,zmm15,0x10
        vmovdqu64       ymm15,YMMWORD[304+rcx]
        vinserti64x2    zmm15,zmm15,ZMMWORD[336+rcx],2
        vpclmulqdq      zmm7,zmm3,zmm15,0x01
        vpclmulqdq      zmm8,zmm3,zmm15,0x10
        vpclmulqdq      zmm1,zmm3,zmm15,0x11
        vpclmulqdq      zmm6,zmm3,zmm15,0x00

        vpxorq  zmm7,zmm7,zmm12
        vpxorq  zmm8,zmm8,zmm13
        vpxorq  zmm1,zmm1,zmm9
        vpxorq  zmm6,zmm6,zmm10

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm14,xmm15,xmm7,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_6
$L$_AAD_blocks_6_6:
        sub     r12,512
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        ymm3{k1}{z},[64+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb ymm3,ymm3,ymm16
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       zmm15,ZMMWORD[256+rcx]
        vpclmulqdq      zmm9,zmm11,zmm15,0x11
        vpclmulqdq      zmm10,zmm11,zmm15,0x00
        vpclmulqdq      zmm12,zmm11,zmm15,0x01
        vpclmulqdq      zmm13,zmm11,zmm15,0x10
        vmovdqu64       ymm15,YMMWORD[320+rcx]
        vpclmulqdq      ymm7,ymm3,ymm15,0x01
        vpclmulqdq      ymm8,ymm3,ymm15,0x10
        vpclmulqdq      ymm1,ymm3,ymm15,0x11
        vpclmulqdq      ymm6,ymm3,ymm15,0x00

        vpxorq  zmm7,zmm7,zmm12
        vpxorq  zmm8,zmm8,zmm13
        vpxorq  zmm1,zmm1,zmm9
        vpxorq  zmm6,zmm6,zmm10

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm14,xmm15,xmm7,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_6
$L$_AAD_blocks_5_6:
        sub     r12,512
        kmovq   k1,[r12]
        vmovdqu8        zmm11,ZMMWORD[r10]
        vmovdqu8        xmm3{k1}{z},[64+r10]
        vpshufb zmm11,zmm11,zmm16
        vpshufb xmm3,xmm3,xmm16
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       zmm15,ZMMWORD[272+rcx]
        vpclmulqdq      zmm9,zmm11,zmm15,0x11
        vpclmulqdq      zmm10,zmm11,zmm15,0x00
        vpclmulqdq      zmm12,zmm11,zmm15,0x01
        vpclmulqdq      zmm13,zmm11,zmm15,0x10
        vmovdqu64       xmm15,XMMWORD[336+rcx]
        vpclmulqdq      xmm7,xmm3,xmm15,0x01
        vpclmulqdq      xmm8,xmm3,xmm15,0x10
        vpclmulqdq      xmm1,xmm3,xmm15,0x11
        vpclmulqdq      xmm6,xmm3,xmm15,0x00

        vpxorq  zmm7,zmm7,zmm12
        vpxorq  zmm8,zmm8,zmm13
        vpxorq  zmm1,zmm1,zmm9
        vpxorq  zmm6,zmm6,zmm10

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm14,xmm15,xmm7,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_6
$L$_AAD_blocks_4_6:
        kmovq   k1,[r12]
        vmovdqu8        zmm11{k1}{z},[r10]
        vpshufb zmm11,zmm11,zmm16
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       zmm15,ZMMWORD[288+rcx]
        vpclmulqdq      zmm9,zmm11,zmm15,0x11
        vpclmulqdq      zmm10,zmm11,zmm15,0x00
        vpclmulqdq      zmm12,zmm11,zmm15,0x01
        vpclmulqdq      zmm13,zmm11,zmm15,0x10

        vpxorq  zmm12,zmm12,zmm13
        vpsrldq zmm7,zmm12,8
        vpslldq zmm8,zmm12,8
        vpxorq  zmm1,zmm9,zmm7
        vpxorq  zmm6,zmm10,zmm8
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm14,xmm15,xmm7,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_6
$L$_AAD_blocks_3_6:
        kmovq   k1,[r12]
        vmovdqu8        zmm11{k1}{z},[r10]
        vpshufb zmm11,zmm11,zmm16
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       ymm15,YMMWORD[304+rcx]
        vinserti64x2    zmm15,zmm15,ZMMWORD[336+rcx],2
        vpclmulqdq      zmm7,zmm11,zmm15,0x01
        vpclmulqdq      zmm8,zmm11,zmm15,0x10
        vpclmulqdq      zmm1,zmm11,zmm15,0x11
        vpclmulqdq      zmm6,zmm11,zmm15,0x00

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm14,xmm15,xmm7,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_6
$L$_AAD_blocks_2_6:
        kmovq   k1,[r12]
        vmovdqu8        ymm11{k1}{z},[r10]
        vpshufb ymm11,ymm11,ymm16
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       ymm15,YMMWORD[320+rcx]
        vpclmulqdq      ymm7,ymm11,ymm15,0x01
        vpclmulqdq      ymm8,ymm11,ymm15,0x10
        vpclmulqdq      ymm1,ymm11,ymm15,0x11
        vpclmulqdq      ymm6,ymm11,ymm15,0x00

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm14,xmm15,xmm7,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm8,xmm1,0x96

        jmp     NEAR $L$_CALC_AAD_done_6
$L$_AAD_blocks_1_6:
        kmovq   k1,[r12]
        vmovdqu8        xmm11{k1}{z},[r10]
        vpshufb xmm11,xmm11,xmm16
        vpxorq  zmm11,zmm11,zmm14
        vmovdqu64       xmm15,XMMWORD[336+rcx]
        vpclmulqdq      xmm7,xmm11,xmm15,0x01
        vpclmulqdq      xmm8,xmm11,xmm15,0x10
        vpclmulqdq      xmm1,xmm11,xmm15,0x11
        vpclmulqdq      xmm6,xmm11,xmm15,0x00

        vpxorq  zmm7,zmm7,zmm8
        vpsrldq zmm12,zmm7,8
        vpslldq zmm13,zmm7,8
        vpxorq  zmm1,zmm1,zmm12
        vpxorq  zmm6,zmm6,zmm13
        vextracti64x4   ymm12,zmm1,1
        vpxorq  ymm1,ymm1,ymm12
        vextracti32x4   xmm12,ymm1,1
        vpxorq  xmm1,xmm1,xmm12
        vextracti64x4   ymm13,zmm6,1
        vpxorq  ymm6,ymm6,ymm13
        vextracti32x4   xmm13,ymm6,1
        vpxorq  xmm6,xmm6,xmm13
        vmovdqa64       xmm15,XMMWORD[POLY2]


        vpclmulqdq      xmm7,xmm15,xmm6,0x01
        vpslldq xmm7,xmm7,8
        vpxorq  xmm7,xmm6,xmm7


        vpclmulqdq      xmm8,xmm15,xmm7,0x00
        vpsrldq xmm8,xmm8,4
        vpclmulqdq      xmm14,xmm15,xmm7,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm8,xmm1,0x96

$L$_CALC_AAD_done_6:
        vmovdqu64       XMMWORD[64+rcx],xmm14
        cmp     r8,256
        jbe     NEAR $L$skip_hkeys_cleanup_9
        vpxor   xmm0,xmm0,xmm0
        vmovdqa64       ZMMWORD[rsp],zmm0
        vmovdqa64       ZMMWORD[64+rsp],zmm0
        vmovdqa64       ZMMWORD[128+rsp],zmm0
        vmovdqa64       ZMMWORD[192+rsp],zmm0
        vmovdqa64       ZMMWORD[256+rsp],zmm0
        vmovdqa64       ZMMWORD[320+rsp],zmm0
        vmovdqa64       ZMMWORD[384+rsp],zmm0
        vmovdqa64       ZMMWORD[448+rsp],zmm0
        vmovdqa64       ZMMWORD[512+rsp],zmm0
        vmovdqa64       ZMMWORD[576+rsp],zmm0
        vmovdqa64       ZMMWORD[640+rsp],zmm0
        vmovdqa64       ZMMWORD[704+rsp],zmm0
$L$skip_hkeys_cleanup_9:
        vzeroupper
        vmovdqu xmm15,XMMWORD[((-16))+rbp]
        vmovdqu xmm14,XMMWORD[((-32))+rbp]
        vmovdqu xmm13,XMMWORD[((-48))+rbp]
        vmovdqu xmm12,XMMWORD[((-64))+rbp]
        vmovdqu xmm11,XMMWORD[((-80))+rbp]
        vmovdqu xmm10,XMMWORD[((-96))+rbp]
        vmovdqu xmm9,XMMWORD[((-112))+rbp]
        vmovdqu xmm8,XMMWORD[((-128))+rbp]
        vmovdqu xmm7,XMMWORD[((-144))+rbp]
        vmovdqu xmm6,XMMWORD[((-160))+rbp]
        lea     rsp,[8+rbp]
        pop     rsi

        pop     rdi

        pop     r15

        pop     r14

        pop     r13

        pop     r12

        pop     rbp

        pop     rbx

$L$exit_update_aad:
        DB      0F3h,0C3h               ;repret
$L$ghash_seh_end:


global  ossl_aes_gcm_encrypt_avx512

ALIGN   32
ossl_aes_gcm_encrypt_avx512:

$L$encrypt_seh_begin:
DB      243,15,30,250
        push    rbx

$L$encrypt_seh_push_rbx:
        push    rbp

$L$encrypt_seh_push_rbp:
        push    r12

$L$encrypt_seh_push_r12:
        push    r13

$L$encrypt_seh_push_r13:
        push    r14

$L$encrypt_seh_push_r14:
        push    r15

$L$encrypt_seh_push_r15:
        push    rdi
$L$encrypt_seh_push_rdi:
        push    rsi
$L$encrypt_seh_push_rsi:

        sub     rsp,168
$L$encrypt_seh_allocstack_xmm:










        lea     rbp,[160+rsp]

$L$encrypt_seh_setfp:
        vmovdqu XMMWORD[rsp],xmm6
$L$encrypt_seh_save_xmm6:
        vmovdqu XMMWORD[16+rsp],xmm7
$L$encrypt_seh_save_xmm7:
        vmovdqu XMMWORD[32+rsp],xmm8
$L$encrypt_seh_save_xmm8:
        vmovdqu XMMWORD[48+rsp],xmm9
$L$encrypt_seh_save_xmm9:
        vmovdqu XMMWORD[64+rsp],xmm10
$L$encrypt_seh_save_xmm10:
        vmovdqu XMMWORD[80+rsp],xmm11
$L$encrypt_seh_save_xmm11:
        vmovdqu XMMWORD[96+rsp],xmm12
$L$encrypt_seh_save_xmm12:
        vmovdqu XMMWORD[112+rsp],xmm13
$L$encrypt_seh_save_xmm13:
        vmovdqu XMMWORD[128+rsp],xmm14
$L$encrypt_seh_save_xmm14:
        vmovdqu XMMWORD[144+rsp],xmm15
$L$encrypt_seh_save_xmm15:

$L$encrypt_seh_prolog_end:
        sub     rsp,1584
        and     rsp,(-64)


        mov     eax,DWORD[240+rcx]
        cmp     eax,9
        je      NEAR $L$aes_gcm_encrypt_128_avx512
        cmp     eax,11
        je      NEAR $L$aes_gcm_encrypt_192_avx512
        cmp     eax,13
        je      NEAR $L$aes_gcm_encrypt_256_avx512
        xor     eax,eax
        jmp     NEAR $L$exit_gcm_encrypt
ALIGN   32
$L$aes_gcm_encrypt_128_avx512:
        cmp     QWORD[112+rbp],0
        je      NEAR $L$_enc_dec_done_10
        xor     r14,r14
        vmovdqu64       xmm14,XMMWORD[64+rdx]

        mov     r11,QWORD[r8]
        or      r11,r11
        je      NEAR $L$_partial_block_done_11
        mov     r10d,16
        lea     r12,[byte_len_to_mask_table]
        cmp     QWORD[112+rbp],r10
        cmovc   r10,QWORD[112+rbp]
        add     r12,r10
        add     r12,r10
        kmovw   k1,[r12]
        vmovdqu8        xmm0{k1}{z},[r9]

        vmovdqu64       xmm3,XMMWORD[16+rdx]
        vmovdqu64       xmm4,XMMWORD[336+rdx]



        lea     r12,[SHIFT_MASK]
        add     r12,r11
        vmovdqu64       xmm5,XMMWORD[r12]
        vpshufb xmm3,xmm3,xmm5
        vpxorq  xmm3,xmm3,xmm0


        mov     r13,QWORD[112+rbp]
        add     r13,r11
        sub     r13,16
        jge     NEAR $L$_no_extra_mask_11
        sub     r12,r13
$L$_no_extra_mask_11:



        vmovdqu64       xmm0,XMMWORD[16+r12]
        vpand   xmm3,xmm3,xmm0
        vpshufb xmm3,xmm3,XMMWORD[SHUF_MASK]
        vpshufb xmm3,xmm3,xmm5
        vpxorq  xmm14,xmm14,xmm3
        cmp     r13,0
        jl      NEAR $L$_partial_incomplete_11

        vpclmulqdq      xmm7,xmm14,xmm4,0x11
        vpclmulqdq      xmm10,xmm14,xmm4,0x00
        vpclmulqdq      xmm11,xmm14,xmm4,0x01
        vpclmulqdq      xmm14,xmm14,xmm4,0x10
        vpxorq  xmm14,xmm14,xmm11

        vpsrldq xmm11,xmm14,8
        vpslldq xmm14,xmm14,8
        vpxorq  xmm7,xmm7,xmm11
        vpxorq  xmm14,xmm14,xmm10



        vmovdqu64       xmm11,XMMWORD[POLY2]

        vpclmulqdq      xmm10,xmm11,xmm14,0x01
        vpslldq xmm10,xmm10,8
        vpxorq  xmm14,xmm14,xmm10



        vpclmulqdq      xmm10,xmm11,xmm14,0x00
        vpsrldq xmm10,xmm10,4
        vpclmulqdq      xmm14,xmm11,xmm14,0x10
        vpslldq xmm14,xmm14,4

        vpternlogq      xmm14,xmm7,xmm10,0x96

        mov     QWORD[r8],0

        mov     r12,r11
        mov     r11,16
        sub     r11,r12
        jmp     NEAR $L$_enc_dec_done_11

$L$_partial_incomplete_11:
        mov     r12,QWORD[112+rbp]
        add     QWORD[r8],r12
        mov     r11,QWORD[112+rbp]

$L$_enc_dec_done_11:


        lea     r12,[byte_len_to_mask_table]
        kmovw   k1,[r11*2+r12]
        vmovdqu64       XMMWORD[64+rdx],xmm14

        vpshufb xmm3,xmm3,XMMWORD[SHUF_MASK]
        vpshufb xmm3,xmm3,xmm5
        mov     r12,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r12]{k1},xmm3
$L$_partial_block_done_11:
        vmovdqu64       xmm2,XMMWORD[rdx]
        mov     r13,QWORD[112+rbp]
        sub     r13,r11
        je      NEAR $L$_enc_dec_done_10
        cmp     r13,256
        jbe     NEAR $L$_message_below_equal_16_blocks_10

        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vmovdqa64       zmm27,ZMMWORD[ddq_addbe_4444]
        vmovdqa64       zmm28,ZMMWORD[ddq_addbe_1234]






        vmovd   r15d,xmm2
        and     r15d,255

        vshufi64x2      zmm2,zmm2,zmm2,0
        vpshufb zmm2,zmm2,zmm29



        cmp     r15b,240
        jae     NEAR $L$_next_16_overflow_12
        vpaddd  zmm7,zmm2,zmm28
        vpaddd  zmm10,zmm7,zmm27
        vpaddd  zmm11,zmm10,zmm27
        vpaddd  zmm12,zmm11,zmm27
        jmp     NEAR $L$_next_16_ok_12
$L$_next_16_overflow_12:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm12,ZMMWORD[ddq_add_4444]
        vpaddd  zmm7,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm10,zmm7,zmm12
        vpaddd  zmm11,zmm10,zmm12
        vpaddd  zmm12,zmm11,zmm12
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vpshufb zmm12,zmm12,zmm29
$L$_next_16_ok_12:
        vshufi64x2      zmm2,zmm12,zmm12,255
        add     r15b,16

        vmovdqu8        zmm0,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm3,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm4,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm5,ZMMWORD[192+r11*1+r9]


        vbroadcastf64x2 zmm6,ZMMWORD[rcx]
        vpxorq  zmm7,zmm7,zmm6
        vpxorq  zmm10,zmm10,zmm6
        vpxorq  zmm11,zmm11,zmm6
        vpxorq  zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[16+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[32+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[48+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[64+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[80+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[96+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[112+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[128+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[144+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[160+rcx]
        vaesenclast     zmm7,zmm7,zmm6
        vaesenclast     zmm10,zmm10,zmm6
        vaesenclast     zmm11,zmm11,zmm6
        vaesenclast     zmm12,zmm12,zmm6


        vpxorq  zmm7,zmm7,zmm0
        vpxorq  zmm10,zmm10,zmm3
        vpxorq  zmm11,zmm11,zmm4
        vpxorq  zmm12,zmm12,zmm5


        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm7
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm10
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm11
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm12

        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vpshufb zmm12,zmm12,zmm29
        vmovdqa64       ZMMWORD[768+rsp],zmm7
        vmovdqa64       ZMMWORD[832+rsp],zmm10
        vmovdqa64       ZMMWORD[896+rsp],zmm11
        vmovdqa64       ZMMWORD[960+rsp],zmm12
        test    r14,r14
        jnz     NEAR $L$_skip_hkeys_precomputation_13

        vmovdqu64       zmm0,ZMMWORD[288+rdx]
        vmovdqu64       ZMMWORD[704+rsp],zmm0

        vmovdqu64       zmm3,ZMMWORD[224+rdx]
        vmovdqu64       ZMMWORD[640+rsp],zmm3


        vshufi64x2      zmm3,zmm3,zmm3,0x00

        vmovdqu64       zmm4,ZMMWORD[160+rdx]
        vmovdqu64       ZMMWORD[576+rsp],zmm4

        vmovdqu64       zmm5,ZMMWORD[96+rdx]
        vmovdqu64       ZMMWORD[512+rsp],zmm5
$L$_skip_hkeys_precomputation_13:
        cmp     r13,512
        jb      NEAR $L$_message_below_32_blocks_10



        cmp     r15b,240
        jae     NEAR $L$_next_16_overflow_14
        vpaddd  zmm7,zmm2,zmm28
        vpaddd  zmm10,zmm7,zmm27
        vpaddd  zmm11,zmm10,zmm27
        vpaddd  zmm12,zmm11,zmm27
        jmp     NEAR $L$_next_16_ok_14
$L$_next_16_overflow_14:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm12,ZMMWORD[ddq_add_4444]
        vpaddd  zmm7,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm10,zmm7,zmm12
        vpaddd  zmm11,zmm10,zmm12
        vpaddd  zmm12,zmm11,zmm12
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vpshufb zmm12,zmm12,zmm29
$L$_next_16_ok_14:
        vshufi64x2      zmm2,zmm12,zmm12,255
        add     r15b,16

        vmovdqu8        zmm0,ZMMWORD[256+r11*1+r9]
        vmovdqu8        zmm3,ZMMWORD[320+r11*1+r9]
        vmovdqu8        zmm4,ZMMWORD[384+r11*1+r9]
        vmovdqu8        zmm5,ZMMWORD[448+r11*1+r9]


        vbroadcastf64x2 zmm6,ZMMWORD[rcx]
        vpxorq  zmm7,zmm7,zmm6
        vpxorq  zmm10,zmm10,zmm6
        vpxorq  zmm11,zmm11,zmm6
        vpxorq  zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[16+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[32+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[48+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[64+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[80+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[96+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[112+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[128+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[144+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[160+rcx]
        vaesenclast     zmm7,zmm7,zmm6
        vaesenclast     zmm10,zmm10,zmm6
        vaesenclast     zmm11,zmm11,zmm6
        vaesenclast     zmm12,zmm12,zmm6


        vpxorq  zmm7,zmm7,zmm0
        vpxorq  zmm10,zmm10,zmm3
        vpxorq  zmm11,zmm11,zmm4
        vpxorq  zmm12,zmm12,zmm5


        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[256+r11*1+r10],zmm7
        vmovdqu8        ZMMWORD[320+r11*1+r10],zmm10
        vmovdqu8        ZMMWORD[384+r11*1+r10],zmm11
        vmovdqu8        ZMMWORD[448+r11*1+r10],zmm12

        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vpshufb zmm12,zmm12,zmm29
        vmovdqa64       ZMMWORD[1024+rsp],zmm7
        vmovdqa64       ZMMWORD[1088+rsp],zmm10
        vmovdqa64       ZMMWORD[1152+rsp],zmm11
        vmovdqa64       ZMMWORD[1216+rsp],zmm12
        test    r14,r14
        jnz     NEAR $L$_skip_hkeys_precomputation_15
        vmovdqu64       zmm3,ZMMWORD[640+rsp]


        vshufi64x2      zmm3,zmm3,zmm3,0x00

        vmovdqu64       zmm4,ZMMWORD[576+rsp]
        vmovdqu64       zmm5,ZMMWORD[512+rsp]

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[448+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[384+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[320+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[256+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[192+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[128+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[64+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[rsp],zmm5
$L$_skip_hkeys_precomputation_15:
        mov     r14,1
        add     r11,512
        sub     r13,512

        cmp     r13,768
        jb      NEAR $L$_no_more_big_nblocks_10
$L$_encrypt_big_nblocks_10:
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_16
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_16
$L$_16_blocks_overflow_16:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_16:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[192+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm26,zmm10,zmm15
        vpxorq  zmm24,zmm6,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqa64       ZMMWORD[1280+rsp],zmm0
        vmovdqa64       ZMMWORD[1344+rsp],zmm3
        vmovdqa64       ZMMWORD[1408+rsp],zmm4
        vmovdqa64       ZMMWORD[1472+rsp],zmm5
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_17
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_17
$L$_16_blocks_overflow_17:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_17:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[256+rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[320+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[384+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[448+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[256+r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[320+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[384+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[448+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vpternlogq      zmm24,zmm6,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[256+r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[320+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[384+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[448+r11*1+r10],zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqa64       ZMMWORD[768+rsp],zmm0
        vmovdqa64       ZMMWORD[832+rsp],zmm3
        vmovdqa64       ZMMWORD[896+rsp],zmm4
        vmovdqa64       ZMMWORD[960+rsp],zmm5
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_18
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_18
$L$_16_blocks_overflow_18:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_18:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[512+r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[576+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[640+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[704+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]


        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96

        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpternlogq      zmm6,zmm12,zmm15,0x96
        vpxorq  zmm6,zmm6,zmm24
        vpternlogq      zmm7,zmm13,zmm10,0x96
        vpxorq  zmm7,zmm7,zmm25
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vextracti64x4   ymm12,zmm6,1
        vpxorq  ymm6,ymm6,ymm12
        vextracti32x4   xmm12,ymm6,1
        vpxorq  xmm6,xmm6,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm6,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[512+r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[576+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[640+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[704+r11*1+r10],zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqa64       ZMMWORD[1024+rsp],zmm0
        vmovdqa64       ZMMWORD[1088+rsp],zmm3
        vmovdqa64       ZMMWORD[1152+rsp],zmm4
        vmovdqa64       ZMMWORD[1216+rsp],zmm5
        vmovdqa64       zmm14,zmm6

        add     r11,768
        sub     r13,768
        cmp     r13,768
        jae     NEAR $L$_encrypt_big_nblocks_10

$L$_no_more_big_nblocks_10:

        cmp     r13,512
        jae     NEAR $L$_encrypt_32_blocks_10

        cmp     r13,256
        jae     NEAR $L$_encrypt_16_blocks_10
$L$_encrypt_0_blocks_ghash_32_10:
        mov     r10d,r13d
        and     r10d,~15
        mov     ebx,256
        sub     ebx,r10d
        vmovdqa64       zmm13,ZMMWORD[768+rsp]
        vpxorq  zmm13,zmm13,zmm14
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[832+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpxorq  zmm26,zmm4,zmm10
        vpxorq  zmm24,zmm0,zmm6
        vpxorq  zmm25,zmm3,zmm7
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[896+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[960+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        add     ebx,256
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_19

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_19
        jb      NEAR $L$_last_num_blocks_is_7_1_19


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_19
        jb      NEAR $L$_last_num_blocks_is_11_9_19


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_19
        ja      NEAR $L$_last_num_blocks_is_16_19
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_19
        jmp     NEAR $L$_last_num_blocks_is_13_19

$L$_last_num_blocks_is_11_9_19:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_19
        ja      NEAR $L$_last_num_blocks_is_11_19
        jmp     NEAR $L$_last_num_blocks_is_9_19

$L$_last_num_blocks_is_7_1_19:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_19
        jb      NEAR $L$_last_num_blocks_is_3_1_19

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_19
        je      NEAR $L$_last_num_blocks_is_6_19
        jmp     NEAR $L$_last_num_blocks_is_5_19

$L$_last_num_blocks_is_3_1_19:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_19
        je      NEAR $L$_last_num_blocks_is_2_19
$L$_last_num_blocks_is_1_19:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_20
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_20

$L$_16_blocks_overflow_20:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_20:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm31
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb xmm17,xmm0,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_21





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_21
$L$_small_initial_partial_block_21:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11


        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm0,XMMWORD[POLY2]


        vpclmulqdq      xmm3,xmm0,xmm25,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm3,xmm25,xmm3


        vpclmulqdq      xmm4,xmm0,xmm3,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm14,xmm0,xmm3,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm4,xmm24,0x96












        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_21
$L$_small_initial_compute_done_21:
$L$_after_reduction_21:
        jmp     NEAR $L$_last_blocks_done_19
$L$_last_num_blocks_is_2_19:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_22
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_22

$L$_16_blocks_overflow_22:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_22:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm31
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb ymm17,ymm0,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_23





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_23
$L$_small_initial_partial_block_23:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_23:

        or      r13,r13
        je      NEAR $L$_after_reduction_23
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_23:
        jmp     NEAR $L$_last_blocks_done_19
$L$_last_num_blocks_is_3_19:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_24
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_24

$L$_16_blocks_overflow_24:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_24:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_25





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_25
$L$_small_initial_partial_block_25:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_25:

        or      r13,r13
        je      NEAR $L$_after_reduction_25
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_25:
        jmp     NEAR $L$_last_blocks_done_19
$L$_last_num_blocks_is_4_19:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_26
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_26

$L$_16_blocks_overflow_26:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_26:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_27





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_27
$L$_small_initial_partial_block_27:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_27:

        or      r13,r13
        je      NEAR $L$_after_reduction_27
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_27:
        jmp     NEAR $L$_last_blocks_done_19
$L$_last_num_blocks_is_5_19:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_28
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_28

$L$_16_blocks_overflow_28:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_28:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb xmm19,xmm3,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_29





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_29
$L$_small_initial_partial_block_29:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_29:

        or      r13,r13
        je      NEAR $L$_after_reduction_29
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_29:
        jmp     NEAR $L$_last_blocks_done_19
$L$_last_num_blocks_is_6_19:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_30
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_30

$L$_16_blocks_overflow_30:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_30:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb ymm19,ymm3,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_31





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_31
$L$_small_initial_partial_block_31:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_31:

        or      r13,r13
        je      NEAR $L$_after_reduction_31
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_31:
        jmp     NEAR $L$_last_blocks_done_19
$L$_last_num_blocks_is_7_19:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_32
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_32

$L$_16_blocks_overflow_32:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_32:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_33





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_33
$L$_small_initial_partial_block_33:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_33:

        or      r13,r13
        je      NEAR $L$_after_reduction_33
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_33:
        jmp     NEAR $L$_last_blocks_done_19
$L$_last_num_blocks_is_8_19:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_34
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_34

$L$_16_blocks_overflow_34:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_34:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_35





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_35
$L$_small_initial_partial_block_35:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_35:

        or      r13,r13
        je      NEAR $L$_after_reduction_35
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_35:
        jmp     NEAR $L$_last_blocks_done_19
$L$_last_num_blocks_is_9_19:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_36
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_36

$L$_16_blocks_overflow_36:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_36:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb xmm20,xmm4,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_37





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_37
$L$_small_initial_partial_block_37:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_37:

        or      r13,r13
        je      NEAR $L$_after_reduction_37
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_37:
        jmp     NEAR $L$_last_blocks_done_19
$L$_last_num_blocks_is_10_19:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_38
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_38

$L$_16_blocks_overflow_38:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_38:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb ymm20,ymm4,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_39





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_39
$L$_small_initial_partial_block_39:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_39:

        or      r13,r13
        je      NEAR $L$_after_reduction_39
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_39:
        jmp     NEAR $L$_last_blocks_done_19
$L$_last_num_blocks_is_11_19:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_40
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_40

$L$_16_blocks_overflow_40:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_40:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_41





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_41
$L$_small_initial_partial_block_41:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_41:

        or      r13,r13
        je      NEAR $L$_after_reduction_41
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_41:
        jmp     NEAR $L$_last_blocks_done_19
$L$_last_num_blocks_is_12_19:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_42
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_42

$L$_16_blocks_overflow_42:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_42:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_43





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_43
$L$_small_initial_partial_block_43:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_43:

        or      r13,r13
        je      NEAR $L$_after_reduction_43
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_43:
        jmp     NEAR $L$_last_blocks_done_19
$L$_last_num_blocks_is_13_19:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_44
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_44

$L$_16_blocks_overflow_44:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_44:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb xmm21,xmm5,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_45





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_45
$L$_small_initial_partial_block_45:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_45:

        or      r13,r13
        je      NEAR $L$_after_reduction_45
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_45:
        jmp     NEAR $L$_last_blocks_done_19
$L$_last_num_blocks_is_14_19:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_46
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_46

$L$_16_blocks_overflow_46:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_46:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb ymm21,ymm5,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_47





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_47
$L$_small_initial_partial_block_47:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_47:

        or      r13,r13
        je      NEAR $L$_after_reduction_47
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_47:
        jmp     NEAR $L$_last_blocks_done_19
$L$_last_num_blocks_is_15_19:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_48
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_48

$L$_16_blocks_overflow_48:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_48:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_49





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_49
$L$_small_initial_partial_block_49:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_49:

        or      r13,r13
        je      NEAR $L$_after_reduction_49
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_49:
        jmp     NEAR $L$_last_blocks_done_19
$L$_last_num_blocks_is_16_19:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_50
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_50

$L$_16_blocks_overflow_50:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_50:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_51:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_51:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_51:
        jmp     NEAR $L$_last_blocks_done_19
$L$_last_num_blocks_is_0_19:
        vmovdqa64       zmm13,ZMMWORD[1024+rsp]
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1088+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1152+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1216+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_19:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_10
$L$_encrypt_32_blocks_10:
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_52
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_52
$L$_16_blocks_overflow_52:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_52:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[192+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm26,zmm10,zmm15
        vpxorq  zmm24,zmm6,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqa64       ZMMWORD[1280+rsp],zmm0
        vmovdqa64       ZMMWORD[1344+rsp],zmm3
        vmovdqa64       ZMMWORD[1408+rsp],zmm4
        vmovdqa64       ZMMWORD[1472+rsp],zmm5
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_53
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_53
$L$_16_blocks_overflow_53:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_53:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[256+rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[320+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[384+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[448+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[256+r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[320+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[384+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[448+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vpternlogq      zmm24,zmm6,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[256+r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[320+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[384+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[448+r11*1+r10],zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqa64       ZMMWORD[768+rsp],zmm0
        vmovdqa64       ZMMWORD[832+rsp],zmm3
        vmovdqa64       ZMMWORD[896+rsp],zmm4
        vmovdqa64       ZMMWORD[960+rsp],zmm5
        vmovdqa64       zmm13,ZMMWORD[1280+rsp]
        vmovdqu64       zmm12,ZMMWORD[512+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1344+rsp]
        vmovdqu64       zmm12,ZMMWORD[576+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1408+rsp]
        vmovdqu64       zmm12,ZMMWORD[640+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1472+rsp]
        vmovdqu64       zmm12,ZMMWORD[704+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

        sub     r13,512
        add     r11,512
        mov     r10d,r13d
        and     r10d,~15
        mov     ebx,512
        sub     ebx,r10d
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_54

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_54
        jb      NEAR $L$_last_num_blocks_is_7_1_54


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_54
        jb      NEAR $L$_last_num_blocks_is_11_9_54


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_54
        ja      NEAR $L$_last_num_blocks_is_16_54
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_54
        jmp     NEAR $L$_last_num_blocks_is_13_54

$L$_last_num_blocks_is_11_9_54:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_54
        ja      NEAR $L$_last_num_blocks_is_11_54
        jmp     NEAR $L$_last_num_blocks_is_9_54

$L$_last_num_blocks_is_7_1_54:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_54
        jb      NEAR $L$_last_num_blocks_is_3_1_54

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_54
        je      NEAR $L$_last_num_blocks_is_6_54
        jmp     NEAR $L$_last_num_blocks_is_5_54

$L$_last_num_blocks_is_3_1_54:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_54
        je      NEAR $L$_last_num_blocks_is_2_54
$L$_last_num_blocks_is_1_54:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_55
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_55

$L$_16_blocks_overflow_55:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_55:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm31
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb xmm17,xmm0,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_56





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_56
$L$_small_initial_partial_block_56:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11


        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm0,XMMWORD[POLY2]


        vpclmulqdq      xmm3,xmm0,xmm25,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm3,xmm25,xmm3


        vpclmulqdq      xmm4,xmm0,xmm3,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm14,xmm0,xmm3,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm4,xmm24,0x96












        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_56
$L$_small_initial_compute_done_56:
$L$_after_reduction_56:
        jmp     NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_2_54:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_57
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_57

$L$_16_blocks_overflow_57:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_57:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm31
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb ymm17,ymm0,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_58





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_58
$L$_small_initial_partial_block_58:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_58:

        or      r13,r13
        je      NEAR $L$_after_reduction_58
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_58:
        jmp     NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_3_54:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_59
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_59

$L$_16_blocks_overflow_59:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_59:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_60





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_60
$L$_small_initial_partial_block_60:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_60:

        or      r13,r13
        je      NEAR $L$_after_reduction_60
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_60:
        jmp     NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_4_54:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_61
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_61

$L$_16_blocks_overflow_61:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_61:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_62





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_62
$L$_small_initial_partial_block_62:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_62:

        or      r13,r13
        je      NEAR $L$_after_reduction_62
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_62:
        jmp     NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_5_54:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_63
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_63

$L$_16_blocks_overflow_63:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_63:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb xmm19,xmm3,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_64





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_64
$L$_small_initial_partial_block_64:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_64:

        or      r13,r13
        je      NEAR $L$_after_reduction_64
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_64:
        jmp     NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_6_54:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_65
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_65

$L$_16_blocks_overflow_65:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_65:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb ymm19,ymm3,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_66





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_66
$L$_small_initial_partial_block_66:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_66:

        or      r13,r13
        je      NEAR $L$_after_reduction_66
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_66:
        jmp     NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_7_54:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_67
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_67

$L$_16_blocks_overflow_67:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_67:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_68





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_68
$L$_small_initial_partial_block_68:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_68:

        or      r13,r13
        je      NEAR $L$_after_reduction_68
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_68:
        jmp     NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_8_54:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_69
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_69

$L$_16_blocks_overflow_69:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_69:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_70





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_70
$L$_small_initial_partial_block_70:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_70:

        or      r13,r13
        je      NEAR $L$_after_reduction_70
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_70:
        jmp     NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_9_54:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_71
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_71

$L$_16_blocks_overflow_71:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_71:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb xmm20,xmm4,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_72





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_72
$L$_small_initial_partial_block_72:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_72:

        or      r13,r13
        je      NEAR $L$_after_reduction_72
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_72:
        jmp     NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_10_54:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_73
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_73

$L$_16_blocks_overflow_73:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_73:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb ymm20,ymm4,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_74





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_74
$L$_small_initial_partial_block_74:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_74:

        or      r13,r13
        je      NEAR $L$_after_reduction_74
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_74:
        jmp     NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_11_54:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_75
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_75

$L$_16_blocks_overflow_75:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_75:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_76





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_76
$L$_small_initial_partial_block_76:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_76:

        or      r13,r13
        je      NEAR $L$_after_reduction_76
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_76:
        jmp     NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_12_54:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_77
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_77

$L$_16_blocks_overflow_77:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_77:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_78





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_78
$L$_small_initial_partial_block_78:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_78:

        or      r13,r13
        je      NEAR $L$_after_reduction_78
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_78:
        jmp     NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_13_54:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_79
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_79

$L$_16_blocks_overflow_79:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_79:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb xmm21,xmm5,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_80





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_80
$L$_small_initial_partial_block_80:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_80:

        or      r13,r13
        je      NEAR $L$_after_reduction_80
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_80:
        jmp     NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_14_54:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_81
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_81

$L$_16_blocks_overflow_81:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_81:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb ymm21,ymm5,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_82





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_82
$L$_small_initial_partial_block_82:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_82:

        or      r13,r13
        je      NEAR $L$_after_reduction_82
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_82:
        jmp     NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_15_54:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_83
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_83

$L$_16_blocks_overflow_83:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_83:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_84





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_84
$L$_small_initial_partial_block_84:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_84:

        or      r13,r13
        je      NEAR $L$_after_reduction_84
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_84:
        jmp     NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_16_54:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_85
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_85

$L$_16_blocks_overflow_85:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_85:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_86:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_86:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_86:
        jmp     NEAR $L$_last_blocks_done_54
$L$_last_num_blocks_is_0_54:
        vmovdqa64       zmm13,ZMMWORD[768+rsp]
        vpxorq  zmm13,zmm13,zmm14
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[832+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpxorq  zmm26,zmm4,zmm10
        vpxorq  zmm24,zmm0,zmm6
        vpxorq  zmm25,zmm3,zmm7
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[896+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[960+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_54:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_10
$L$_encrypt_16_blocks_10:
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_87
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_87
$L$_16_blocks_overflow_87:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_87:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[192+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm26,zmm10,zmm15
        vpxorq  zmm24,zmm6,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqa64       ZMMWORD[1280+rsp],zmm0
        vmovdqa64       ZMMWORD[1344+rsp],zmm3
        vmovdqa64       ZMMWORD[1408+rsp],zmm4
        vmovdqa64       ZMMWORD[1472+rsp],zmm5
        vmovdqa64       zmm13,ZMMWORD[1024+rsp]
        vmovdqu64       zmm12,ZMMWORD[256+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1088+rsp]
        vmovdqu64       zmm12,ZMMWORD[320+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1152+rsp]
        vmovdqu64       zmm12,ZMMWORD[384+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1216+rsp]
        vmovdqu64       zmm12,ZMMWORD[448+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        sub     r13,256
        add     r11,256
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_88

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_88
        jb      NEAR $L$_last_num_blocks_is_7_1_88


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_88
        jb      NEAR $L$_last_num_blocks_is_11_9_88


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_88
        ja      NEAR $L$_last_num_blocks_is_16_88
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_88
        jmp     NEAR $L$_last_num_blocks_is_13_88

$L$_last_num_blocks_is_11_9_88:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_88
        ja      NEAR $L$_last_num_blocks_is_11_88
        jmp     NEAR $L$_last_num_blocks_is_9_88

$L$_last_num_blocks_is_7_1_88:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_88
        jb      NEAR $L$_last_num_blocks_is_3_1_88

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_88
        je      NEAR $L$_last_num_blocks_is_6_88
        jmp     NEAR $L$_last_num_blocks_is_5_88

$L$_last_num_blocks_is_3_1_88:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_88
        je      NEAR $L$_last_num_blocks_is_2_88
$L$_last_num_blocks_is_1_88:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_89
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_89

$L$_16_blocks_overflow_89:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_89:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc xmm0,xmm0,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb xmm17,xmm0,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_90





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_90
$L$_small_initial_partial_block_90:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11











        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_90
$L$_small_initial_compute_done_90:
$L$_after_reduction_90:
        jmp     NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_2_88:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_91
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_91

$L$_16_blocks_overflow_91:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_91:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc ymm0,ymm0,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb ymm17,ymm0,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_92





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_92
$L$_small_initial_partial_block_92:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_92:

        or      r13,r13
        je      NEAR $L$_after_reduction_92
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_92:
        jmp     NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_3_88:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_93
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_93

$L$_16_blocks_overflow_93:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_93:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_94





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_94
$L$_small_initial_partial_block_94:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_94:

        or      r13,r13
        je      NEAR $L$_after_reduction_94
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_94:
        jmp     NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_4_88:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_95
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_95

$L$_16_blocks_overflow_95:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_95:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_96





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_96
$L$_small_initial_partial_block_96:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_96:

        or      r13,r13
        je      NEAR $L$_after_reduction_96
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_96:
        jmp     NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_5_88:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_97
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_97

$L$_16_blocks_overflow_97:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_97:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb xmm19,xmm3,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_98





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_98
$L$_small_initial_partial_block_98:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_98:

        or      r13,r13
        je      NEAR $L$_after_reduction_98
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_98:
        jmp     NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_6_88:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_99
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_99

$L$_16_blocks_overflow_99:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_99:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb ymm19,ymm3,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_100





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_100
$L$_small_initial_partial_block_100:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_100:

        or      r13,r13
        je      NEAR $L$_after_reduction_100
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_100:
        jmp     NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_7_88:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_101
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_101

$L$_16_blocks_overflow_101:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_101:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_102





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_102
$L$_small_initial_partial_block_102:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_102:

        or      r13,r13
        je      NEAR $L$_after_reduction_102
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_102:
        jmp     NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_8_88:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_103
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_103

$L$_16_blocks_overflow_103:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_103:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_104





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_104
$L$_small_initial_partial_block_104:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_104:

        or      r13,r13
        je      NEAR $L$_after_reduction_104
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_104:
        jmp     NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_9_88:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_105
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_105

$L$_16_blocks_overflow_105:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_105:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb xmm20,xmm4,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_106





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_106
$L$_small_initial_partial_block_106:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_106:

        or      r13,r13
        je      NEAR $L$_after_reduction_106
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_106:
        jmp     NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_10_88:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_107
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_107

$L$_16_blocks_overflow_107:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_107:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb ymm20,ymm4,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_108





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_108
$L$_small_initial_partial_block_108:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_108:

        or      r13,r13
        je      NEAR $L$_after_reduction_108
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_108:
        jmp     NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_11_88:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_109
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_109

$L$_16_blocks_overflow_109:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_109:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_110





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_110
$L$_small_initial_partial_block_110:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_110:

        or      r13,r13
        je      NEAR $L$_after_reduction_110
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_110:
        jmp     NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_12_88:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_111
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_111

$L$_16_blocks_overflow_111:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_111:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_112





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_112
$L$_small_initial_partial_block_112:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_112:

        or      r13,r13
        je      NEAR $L$_after_reduction_112
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_112:
        jmp     NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_13_88:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_113
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_113

$L$_16_blocks_overflow_113:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_113:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb xmm21,xmm5,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_114





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_114
$L$_small_initial_partial_block_114:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_114:

        or      r13,r13
        je      NEAR $L$_after_reduction_114
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_114:
        jmp     NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_14_88:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_115
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_115

$L$_16_blocks_overflow_115:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_115:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb ymm21,ymm5,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_116





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_116
$L$_small_initial_partial_block_116:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_116:

        or      r13,r13
        je      NEAR $L$_after_reduction_116
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_116:
        jmp     NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_15_88:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_117
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_117

$L$_16_blocks_overflow_117:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_117:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_118





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_118
$L$_small_initial_partial_block_118:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_118:

        or      r13,r13
        je      NEAR $L$_after_reduction_118
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_118:
        jmp     NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_16_88:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_119
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_119

$L$_16_blocks_overflow_119:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_119:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_120:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_120:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_120:
        jmp     NEAR $L$_last_blocks_done_88
$L$_last_num_blocks_is_0_88:
        vmovdqa64       zmm13,ZMMWORD[1280+rsp]
        vmovdqu64       zmm12,ZMMWORD[512+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1344+rsp]
        vmovdqu64       zmm12,ZMMWORD[576+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1408+rsp]
        vmovdqu64       zmm12,ZMMWORD[640+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1472+rsp]
        vmovdqu64       zmm12,ZMMWORD[704+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_88:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_10

$L$_message_below_32_blocks_10:


        sub     r13,256
        add     r11,256
        mov     r10d,r13d
        test    r14,r14
        jnz     NEAR $L$_skip_hkeys_precomputation_121
        vmovdqu64       zmm3,ZMMWORD[640+rsp]


        vshufi64x2      zmm3,zmm3,zmm3,0x00

        vmovdqu64       zmm4,ZMMWORD[576+rsp]
        vmovdqu64       zmm5,ZMMWORD[512+rsp]

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[448+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[384+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[320+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[256+rsp],zmm5
$L$_skip_hkeys_precomputation_121:
        mov     r14,1
        and     r10d,~15
        mov     ebx,512
        sub     ebx,r10d
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_122

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_122
        jb      NEAR $L$_last_num_blocks_is_7_1_122


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_122
        jb      NEAR $L$_last_num_blocks_is_11_9_122


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_122
        ja      NEAR $L$_last_num_blocks_is_16_122
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_122
        jmp     NEAR $L$_last_num_blocks_is_13_122

$L$_last_num_blocks_is_11_9_122:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_122
        ja      NEAR $L$_last_num_blocks_is_11_122
        jmp     NEAR $L$_last_num_blocks_is_9_122

$L$_last_num_blocks_is_7_1_122:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_122
        jb      NEAR $L$_last_num_blocks_is_3_1_122

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_122
        je      NEAR $L$_last_num_blocks_is_6_122
        jmp     NEAR $L$_last_num_blocks_is_5_122

$L$_last_num_blocks_is_3_1_122:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_122
        je      NEAR $L$_last_num_blocks_is_2_122
$L$_last_num_blocks_is_1_122:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_123
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_123

$L$_16_blocks_overflow_123:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_123:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm31
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb xmm17,xmm0,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_124





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_124
$L$_small_initial_partial_block_124:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11


        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm0,XMMWORD[POLY2]


        vpclmulqdq      xmm3,xmm0,xmm25,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm3,xmm25,xmm3


        vpclmulqdq      xmm4,xmm0,xmm3,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm14,xmm0,xmm3,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm4,xmm24,0x96












        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_124
$L$_small_initial_compute_done_124:
$L$_after_reduction_124:
        jmp     NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_2_122:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_125
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_125

$L$_16_blocks_overflow_125:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_125:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm31
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb ymm17,ymm0,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_126





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_126
$L$_small_initial_partial_block_126:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_126:

        or      r13,r13
        je      NEAR $L$_after_reduction_126
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_126:
        jmp     NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_3_122:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_127
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_127

$L$_16_blocks_overflow_127:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_127:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_128





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_128
$L$_small_initial_partial_block_128:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_128:

        or      r13,r13
        je      NEAR $L$_after_reduction_128
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_128:
        jmp     NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_4_122:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_129
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_129

$L$_16_blocks_overflow_129:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_129:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_130





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_130
$L$_small_initial_partial_block_130:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_130:

        or      r13,r13
        je      NEAR $L$_after_reduction_130
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_130:
        jmp     NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_5_122:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_131
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_131

$L$_16_blocks_overflow_131:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_131:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb xmm19,xmm3,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_132





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_132
$L$_small_initial_partial_block_132:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_132:

        or      r13,r13
        je      NEAR $L$_after_reduction_132
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_132:
        jmp     NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_6_122:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_133
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_133

$L$_16_blocks_overflow_133:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_133:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb ymm19,ymm3,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_134





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_134
$L$_small_initial_partial_block_134:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_134:

        or      r13,r13
        je      NEAR $L$_after_reduction_134
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_134:
        jmp     NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_7_122:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_135
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_135

$L$_16_blocks_overflow_135:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_135:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_136





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_136
$L$_small_initial_partial_block_136:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_136:

        or      r13,r13
        je      NEAR $L$_after_reduction_136
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_136:
        jmp     NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_8_122:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_137
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_137

$L$_16_blocks_overflow_137:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_137:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_138





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_138
$L$_small_initial_partial_block_138:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_138:

        or      r13,r13
        je      NEAR $L$_after_reduction_138
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_138:
        jmp     NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_9_122:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_139
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_139

$L$_16_blocks_overflow_139:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_139:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb xmm20,xmm4,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_140





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_140
$L$_small_initial_partial_block_140:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_140:

        or      r13,r13
        je      NEAR $L$_after_reduction_140
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_140:
        jmp     NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_10_122:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_141
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_141

$L$_16_blocks_overflow_141:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_141:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb ymm20,ymm4,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_142





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_142
$L$_small_initial_partial_block_142:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_142:

        or      r13,r13
        je      NEAR $L$_after_reduction_142
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_142:
        jmp     NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_11_122:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_143
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_143

$L$_16_blocks_overflow_143:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_143:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_144





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_144
$L$_small_initial_partial_block_144:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_144:

        or      r13,r13
        je      NEAR $L$_after_reduction_144
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_144:
        jmp     NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_12_122:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_145
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_145

$L$_16_blocks_overflow_145:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_145:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_146





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_146
$L$_small_initial_partial_block_146:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_146:

        or      r13,r13
        je      NEAR $L$_after_reduction_146
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_146:
        jmp     NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_13_122:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_147
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_147

$L$_16_blocks_overflow_147:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_147:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb xmm21,xmm5,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_148





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_148
$L$_small_initial_partial_block_148:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_148:

        or      r13,r13
        je      NEAR $L$_after_reduction_148
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_148:
        jmp     NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_14_122:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_149
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_149

$L$_16_blocks_overflow_149:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_149:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb ymm21,ymm5,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_150





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_150
$L$_small_initial_partial_block_150:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_150:

        or      r13,r13
        je      NEAR $L$_after_reduction_150
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_150:
        jmp     NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_15_122:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_151
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_151

$L$_16_blocks_overflow_151:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_151:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_152





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_152
$L$_small_initial_partial_block_152:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_152:

        or      r13,r13
        je      NEAR $L$_after_reduction_152
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_152:
        jmp     NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_16_122:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_153
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_153

$L$_16_blocks_overflow_153:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_153:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_154:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_154:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_154:
        jmp     NEAR $L$_last_blocks_done_122
$L$_last_num_blocks_is_0_122:
        vmovdqa64       zmm13,ZMMWORD[768+rsp]
        vpxorq  zmm13,zmm13,zmm14
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[832+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpxorq  zmm26,zmm4,zmm10
        vpxorq  zmm24,zmm0,zmm6
        vpxorq  zmm25,zmm3,zmm7
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[896+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[960+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_122:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_10

$L$_message_below_equal_16_blocks_10:


        mov     r12d,r13d
        add     r12d,15
        shr     r12d,4
        cmp     r12,8
        je      NEAR $L$_small_initial_num_blocks_is_8_155
        jl      NEAR $L$_small_initial_num_blocks_is_7_1_155


        cmp     r12,12
        je      NEAR $L$_small_initial_num_blocks_is_12_155
        jl      NEAR $L$_small_initial_num_blocks_is_11_9_155


        cmp     r12,16
        je      NEAR $L$_small_initial_num_blocks_is_16_155
        cmp     r12,15
        je      NEAR $L$_small_initial_num_blocks_is_15_155
        cmp     r12,14
        je      NEAR $L$_small_initial_num_blocks_is_14_155
        jmp     NEAR $L$_small_initial_num_blocks_is_13_155

$L$_small_initial_num_blocks_is_11_9_155:

        cmp     r12,11
        je      NEAR $L$_small_initial_num_blocks_is_11_155
        cmp     r12,10
        je      NEAR $L$_small_initial_num_blocks_is_10_155
        jmp     NEAR $L$_small_initial_num_blocks_is_9_155

$L$_small_initial_num_blocks_is_7_1_155:
        cmp     r12,4
        je      NEAR $L$_small_initial_num_blocks_is_4_155
        jl      NEAR $L$_small_initial_num_blocks_is_3_1_155

        cmp     r12,7
        je      NEAR $L$_small_initial_num_blocks_is_7_155
        cmp     r12,6
        je      NEAR $L$_small_initial_num_blocks_is_6_155
        jmp     NEAR $L$_small_initial_num_blocks_is_5_155

$L$_small_initial_num_blocks_is_3_1_155:

        cmp     r12,3
        je      NEAR $L$_small_initial_num_blocks_is_3_155
        cmp     r12,2
        je      NEAR $L$_small_initial_num_blocks_is_2_155





$L$_small_initial_num_blocks_is_1_155:
        vmovdqa64       xmm29,XMMWORD[SHUF_MASK]
        vpaddd  xmm0,xmm2,XMMWORD[ONE]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,0
        vpshufb xmm0,xmm0,xmm29
        vmovdqu8        xmm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     xmm0,xmm0,xmm15
        vpxorq  xmm0,xmm0,xmm6
        vextracti32x4   xmm12,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb xmm6,xmm0,xmm29
        vextracti32x4   xmm13,zmm6,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_156





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm6,xmm20,0x01
        vpclmulqdq      xmm5,xmm6,xmm20,0x10
        vpclmulqdq      xmm0,xmm6,xmm20,0x11
        vpclmulqdq      xmm3,xmm6,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_156
$L$_small_initial_partial_block_156:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12











        vpxorq  xmm14,xmm14,xmm13

        jmp     NEAR $L$_after_reduction_156
$L$_small_initial_compute_done_156:
$L$_after_reduction_156:
        jmp     NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_2_155:
        vmovdqa64       ymm29,YMMWORD[SHUF_MASK]
        vshufi64x2      ymm0,ymm2,ymm2,0
        vpaddd  ymm0,ymm0,YMMWORD[ddq_add_1234]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,1
        vpshufb ymm0,ymm0,ymm29
        vmovdqu8        ymm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     ymm0,ymm0,ymm15
        vpxorq  ymm0,ymm0,ymm6
        vextracti32x4   xmm12,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb ymm6,ymm0,ymm29
        vextracti32x4   xmm13,zmm6,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_157





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm6,ymm20,0x01
        vpclmulqdq      ymm5,ymm6,ymm20,0x10
        vpclmulqdq      ymm0,ymm6,ymm20,0x11
        vpclmulqdq      ymm3,ymm6,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_157
$L$_small_initial_partial_block_157:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm6,xmm20,0x01
        vpclmulqdq      xmm5,xmm6,xmm20,0x10
        vpclmulqdq      xmm0,xmm6,xmm20,0x11
        vpclmulqdq      xmm3,xmm6,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_157:

        or      r13,r13
        je      NEAR $L$_after_reduction_157
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_157:
        jmp     NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_3_155:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,2
        vpshufb zmm0,zmm0,zmm29
        vmovdqu8        zmm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vextracti32x4   xmm12,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm6,zmm0,zmm29
        vextracti32x4   xmm13,zmm6,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_158





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_158
$L$_small_initial_partial_block_158:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm6,ymm20,0x01
        vpclmulqdq      ymm5,ymm6,ymm20,0x10
        vpclmulqdq      ymm0,ymm6,ymm20,0x11
        vpclmulqdq      ymm3,ymm6,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_158:

        or      r13,r13
        je      NEAR $L$_after_reduction_158
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_158:
        jmp     NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_4_155:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,3
        vpshufb zmm0,zmm0,zmm29
        vmovdqu8        zmm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vextracti32x4   xmm12,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm6,zmm0,zmm29
        vextracti32x4   xmm13,zmm6,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_159





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_159
$L$_small_initial_partial_block_159:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_159:

        or      r13,r13
        je      NEAR $L$_after_reduction_159
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_159:
        jmp     NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_5_155:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,0
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     xmm3,xmm3,xmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  xmm3,xmm3,xmm7
        vextracti32x4   xmm12,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm0,zmm29
        vpshufb xmm7,xmm3,xmm29
        vextracti32x4   xmm13,zmm7,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_160





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm7,xmm20,0x01
        vpclmulqdq      xmm5,xmm7,xmm20,0x10
        vpclmulqdq      xmm0,xmm7,xmm20,0x11
        vpclmulqdq      xmm3,xmm7,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_160
$L$_small_initial_partial_block_160:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_160:

        or      r13,r13
        je      NEAR $L$_after_reduction_160
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_160:
        jmp     NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_6_155:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,1
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     ymm3,ymm3,ymm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  ymm3,ymm3,ymm7
        vextracti32x4   xmm12,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm0,zmm29
        vpshufb ymm7,ymm3,ymm29
        vextracti32x4   xmm13,zmm7,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_161





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm7,ymm20,0x01
        vpclmulqdq      ymm5,ymm7,ymm20,0x10
        vpclmulqdq      ymm0,ymm7,ymm20,0x11
        vpclmulqdq      ymm3,ymm7,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_161
$L$_small_initial_partial_block_161:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm7,xmm20,0x01
        vpclmulqdq      xmm5,xmm7,xmm20,0x10
        vpclmulqdq      xmm0,xmm7,xmm20,0x11
        vpclmulqdq      xmm3,xmm7,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_161:

        or      r13,r13
        je      NEAR $L$_after_reduction_161
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_161:
        jmp     NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_7_155:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,2
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vextracti32x4   xmm12,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vextracti32x4   xmm13,zmm7,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_162





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm7,zmm20,0x01
        vpclmulqdq      zmm5,zmm7,zmm20,0x10
        vpclmulqdq      zmm0,zmm7,zmm20,0x11
        vpclmulqdq      zmm3,zmm7,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_162
$L$_small_initial_partial_block_162:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm7,ymm20,0x01
        vpclmulqdq      ymm5,ymm7,ymm20,0x10
        vpclmulqdq      ymm0,ymm7,ymm20,0x11
        vpclmulqdq      ymm3,ymm7,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_162:

        or      r13,r13
        je      NEAR $L$_after_reduction_162
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_162:
        jmp     NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_8_155:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,3
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vextracti32x4   xmm12,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vextracti32x4   xmm13,zmm7,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_163





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_163
$L$_small_initial_partial_block_163:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm7,zmm20,0x01
        vpclmulqdq      zmm5,zmm7,zmm20,0x10
        vpclmulqdq      zmm0,zmm7,zmm20,0x11
        vpclmulqdq      zmm3,zmm7,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_163:

        or      r13,r13
        je      NEAR $L$_after_reduction_163
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_163:
        jmp     NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_9_155:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,0
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     xmm4,xmm4,xmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  xmm4,xmm4,xmm10
        vextracti32x4   xmm12,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb xmm10,xmm4,xmm29
        vextracti32x4   xmm13,zmm10,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_164





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm10,xmm20,0x01
        vpclmulqdq      xmm5,xmm10,xmm20,0x10
        vpclmulqdq      xmm0,xmm10,xmm20,0x11
        vpclmulqdq      xmm3,xmm10,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_164
$L$_small_initial_partial_block_164:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_164:

        or      r13,r13
        je      NEAR $L$_after_reduction_164
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_164:
        jmp     NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_10_155:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,1
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     ymm4,ymm4,ymm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  ymm4,ymm4,ymm10
        vextracti32x4   xmm12,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb ymm10,ymm4,ymm29
        vextracti32x4   xmm13,zmm10,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_165





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm10,ymm20,0x01
        vpclmulqdq      ymm5,ymm10,ymm20,0x10
        vpclmulqdq      ymm0,ymm10,ymm20,0x11
        vpclmulqdq      ymm3,ymm10,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_165
$L$_small_initial_partial_block_165:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm10,xmm20,0x01
        vpclmulqdq      xmm5,xmm10,xmm20,0x10
        vpclmulqdq      xmm0,xmm10,xmm20,0x11
        vpclmulqdq      xmm3,xmm10,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_165:

        or      r13,r13
        je      NEAR $L$_after_reduction_165
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_165:
        jmp     NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_11_155:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,2
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vextracti32x4   xmm12,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb zmm10,zmm4,zmm29
        vextracti32x4   xmm13,zmm10,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_166





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm10,zmm20,0x01
        vpclmulqdq      zmm5,zmm10,zmm20,0x10
        vpclmulqdq      zmm0,zmm10,zmm20,0x11
        vpclmulqdq      zmm3,zmm10,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_166
$L$_small_initial_partial_block_166:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm10,ymm20,0x01
        vpclmulqdq      ymm5,ymm10,ymm20,0x10
        vpclmulqdq      ymm0,ymm10,ymm20,0x11
        vpclmulqdq      ymm3,ymm10,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_166:

        or      r13,r13
        je      NEAR $L$_after_reduction_166
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_166:
        jmp     NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_12_155:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,3
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vextracti32x4   xmm12,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb zmm10,zmm4,zmm29
        vextracti32x4   xmm13,zmm10,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_167





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_167
$L$_small_initial_partial_block_167:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm10,zmm20,0x01
        vpclmulqdq      zmm5,zmm10,zmm20,0x10
        vpclmulqdq      zmm0,zmm10,zmm20,0x11
        vpclmulqdq      zmm3,zmm10,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_167:

        or      r13,r13
        je      NEAR $L$_after_reduction_167
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_167:
        jmp     NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_13_155:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,0
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     xmm5,xmm5,xmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  xmm5,xmm5,xmm11
        vextracti32x4   xmm12,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb zmm10,zmm4,zmm29
        vpshufb xmm11,xmm5,xmm29
        vextracti32x4   xmm13,zmm11,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_168





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm11,xmm20,0x01
        vpclmulqdq      xmm5,xmm11,xmm20,0x10
        vpclmulqdq      xmm0,xmm11,xmm20,0x11
        vpclmulqdq      xmm3,xmm11,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_168
$L$_small_initial_partial_block_168:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_168:

        or      r13,r13
        je      NEAR $L$_after_reduction_168
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_168:
        jmp     NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_14_155:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,1
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     ymm5,ymm5,ymm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  ymm5,ymm5,ymm11
        vextracti32x4   xmm12,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb zmm10,zmm4,zmm29
        vpshufb ymm11,ymm5,ymm29
        vextracti32x4   xmm13,zmm11,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_169





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm11,ymm20,0x01
        vpclmulqdq      ymm5,ymm11,ymm20,0x10
        vpclmulqdq      ymm0,ymm11,ymm20,0x11
        vpclmulqdq      ymm3,ymm11,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_169
$L$_small_initial_partial_block_169:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm11,xmm20,0x01
        vpclmulqdq      xmm5,xmm11,xmm20,0x10
        vpclmulqdq      xmm0,xmm11,xmm20,0x11
        vpclmulqdq      xmm3,xmm11,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_169:

        or      r13,r13
        je      NEAR $L$_after_reduction_169
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_169:
        jmp     NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_15_155:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,2
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     zmm5,zmm5,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  zmm5,zmm5,zmm11
        vextracti32x4   xmm12,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb zmm10,zmm4,zmm29
        vpshufb zmm11,zmm5,zmm29
        vextracti32x4   xmm13,zmm11,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_170





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm11,zmm20,0x01
        vpclmulqdq      zmm5,zmm11,zmm20,0x10
        vpclmulqdq      zmm0,zmm11,zmm20,0x11
        vpclmulqdq      zmm3,zmm11,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_170
$L$_small_initial_partial_block_170:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm11,ymm20,0x01
        vpclmulqdq      ymm5,ymm11,ymm20,0x10
        vpclmulqdq      ymm0,ymm11,ymm20,0x11
        vpclmulqdq      ymm3,ymm11,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_170:

        or      r13,r13
        je      NEAR $L$_after_reduction_170
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_170:
        jmp     NEAR $L$_small_initial_blocks_encrypted_155
$L$_small_initial_num_blocks_is_16_155:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,3
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     zmm5,zmm5,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  zmm5,zmm5,zmm11
        vextracti32x4   xmm12,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb zmm10,zmm4,zmm29
        vpshufb zmm11,zmm5,zmm29
        vextracti32x4   xmm13,zmm11,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_171:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm11,zmm20,0x01
        vpclmulqdq      zmm5,zmm11,zmm20,0x10
        vpclmulqdq      zmm0,zmm11,zmm20,0x11
        vpclmulqdq      zmm3,zmm11,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_171:
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_171:
$L$_small_initial_blocks_encrypted_155:
$L$_ghash_done_10:
        vmovdqu64       XMMWORD[rdx],xmm2
        vmovdqu64       XMMWORD[64+rdx],xmm14
$L$_enc_dec_done_10:
        jmp     NEAR $L$exit_gcm_encrypt
ALIGN   32
$L$aes_gcm_encrypt_192_avx512:
        cmp     QWORD[112+rbp],0
        je      NEAR $L$_enc_dec_done_172
        xor     r14,r14
        vmovdqu64       xmm14,XMMWORD[64+rdx]

        mov     r11,QWORD[r8]
        or      r11,r11
        je      NEAR $L$_partial_block_done_173
        mov     r10d,16
        lea     r12,[byte_len_to_mask_table]
        cmp     QWORD[112+rbp],r10
        cmovc   r10,QWORD[112+rbp]
        add     r12,r10
        add     r12,r10
        kmovw   k1,[r12]
        vmovdqu8        xmm0{k1}{z},[r9]

        vmovdqu64       xmm3,XMMWORD[16+rdx]
        vmovdqu64       xmm4,XMMWORD[336+rdx]



        lea     r12,[SHIFT_MASK]
        add     r12,r11
        vmovdqu64       xmm5,XMMWORD[r12]
        vpshufb xmm3,xmm3,xmm5
        vpxorq  xmm3,xmm3,xmm0


        mov     r13,QWORD[112+rbp]
        add     r13,r11
        sub     r13,16
        jge     NEAR $L$_no_extra_mask_173
        sub     r12,r13
$L$_no_extra_mask_173:



        vmovdqu64       xmm0,XMMWORD[16+r12]
        vpand   xmm3,xmm3,xmm0
        vpshufb xmm3,xmm3,XMMWORD[SHUF_MASK]
        vpshufb xmm3,xmm3,xmm5
        vpxorq  xmm14,xmm14,xmm3
        cmp     r13,0
        jl      NEAR $L$_partial_incomplete_173

        vpclmulqdq      xmm7,xmm14,xmm4,0x11
        vpclmulqdq      xmm10,xmm14,xmm4,0x00
        vpclmulqdq      xmm11,xmm14,xmm4,0x01
        vpclmulqdq      xmm14,xmm14,xmm4,0x10
        vpxorq  xmm14,xmm14,xmm11

        vpsrldq xmm11,xmm14,8
        vpslldq xmm14,xmm14,8
        vpxorq  xmm7,xmm7,xmm11
        vpxorq  xmm14,xmm14,xmm10



        vmovdqu64       xmm11,XMMWORD[POLY2]

        vpclmulqdq      xmm10,xmm11,xmm14,0x01
        vpslldq xmm10,xmm10,8
        vpxorq  xmm14,xmm14,xmm10



        vpclmulqdq      xmm10,xmm11,xmm14,0x00
        vpsrldq xmm10,xmm10,4
        vpclmulqdq      xmm14,xmm11,xmm14,0x10
        vpslldq xmm14,xmm14,4

        vpternlogq      xmm14,xmm7,xmm10,0x96

        mov     QWORD[r8],0

        mov     r12,r11
        mov     r11,16
        sub     r11,r12
        jmp     NEAR $L$_enc_dec_done_173

$L$_partial_incomplete_173:
        mov     r12,QWORD[112+rbp]
        add     QWORD[r8],r12
        mov     r11,QWORD[112+rbp]

$L$_enc_dec_done_173:


        lea     r12,[byte_len_to_mask_table]
        kmovw   k1,[r11*2+r12]
        vmovdqu64       XMMWORD[64+rdx],xmm14

        vpshufb xmm3,xmm3,XMMWORD[SHUF_MASK]
        vpshufb xmm3,xmm3,xmm5
        mov     r12,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r12]{k1},xmm3
$L$_partial_block_done_173:
        vmovdqu64       xmm2,XMMWORD[rdx]
        mov     r13,QWORD[112+rbp]
        sub     r13,r11
        je      NEAR $L$_enc_dec_done_172
        cmp     r13,256
        jbe     NEAR $L$_message_below_equal_16_blocks_172

        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vmovdqa64       zmm27,ZMMWORD[ddq_addbe_4444]
        vmovdqa64       zmm28,ZMMWORD[ddq_addbe_1234]






        vmovd   r15d,xmm2
        and     r15d,255

        vshufi64x2      zmm2,zmm2,zmm2,0
        vpshufb zmm2,zmm2,zmm29



        cmp     r15b,240
        jae     NEAR $L$_next_16_overflow_174
        vpaddd  zmm7,zmm2,zmm28
        vpaddd  zmm10,zmm7,zmm27
        vpaddd  zmm11,zmm10,zmm27
        vpaddd  zmm12,zmm11,zmm27
        jmp     NEAR $L$_next_16_ok_174
$L$_next_16_overflow_174:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm12,ZMMWORD[ddq_add_4444]
        vpaddd  zmm7,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm10,zmm7,zmm12
        vpaddd  zmm11,zmm10,zmm12
        vpaddd  zmm12,zmm11,zmm12
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vpshufb zmm12,zmm12,zmm29
$L$_next_16_ok_174:
        vshufi64x2      zmm2,zmm12,zmm12,255
        add     r15b,16

        vmovdqu8        zmm0,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm3,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm4,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm5,ZMMWORD[192+r11*1+r9]


        vbroadcastf64x2 zmm6,ZMMWORD[rcx]
        vpxorq  zmm7,zmm7,zmm6
        vpxorq  zmm10,zmm10,zmm6
        vpxorq  zmm11,zmm11,zmm6
        vpxorq  zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[16+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[32+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[48+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[64+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[80+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[96+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[112+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[128+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[144+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[160+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[176+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[192+rcx]
        vaesenclast     zmm7,zmm7,zmm6
        vaesenclast     zmm10,zmm10,zmm6
        vaesenclast     zmm11,zmm11,zmm6
        vaesenclast     zmm12,zmm12,zmm6


        vpxorq  zmm7,zmm7,zmm0
        vpxorq  zmm10,zmm10,zmm3
        vpxorq  zmm11,zmm11,zmm4
        vpxorq  zmm12,zmm12,zmm5


        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm7
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm10
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm11
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm12

        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vpshufb zmm12,zmm12,zmm29
        vmovdqa64       ZMMWORD[768+rsp],zmm7
        vmovdqa64       ZMMWORD[832+rsp],zmm10
        vmovdqa64       ZMMWORD[896+rsp],zmm11
        vmovdqa64       ZMMWORD[960+rsp],zmm12
        test    r14,r14
        jnz     NEAR $L$_skip_hkeys_precomputation_175

        vmovdqu64       zmm0,ZMMWORD[288+rdx]
        vmovdqu64       ZMMWORD[704+rsp],zmm0

        vmovdqu64       zmm3,ZMMWORD[224+rdx]
        vmovdqu64       ZMMWORD[640+rsp],zmm3


        vshufi64x2      zmm3,zmm3,zmm3,0x00

        vmovdqu64       zmm4,ZMMWORD[160+rdx]
        vmovdqu64       ZMMWORD[576+rsp],zmm4

        vmovdqu64       zmm5,ZMMWORD[96+rdx]
        vmovdqu64       ZMMWORD[512+rsp],zmm5
$L$_skip_hkeys_precomputation_175:
        cmp     r13,512
        jb      NEAR $L$_message_below_32_blocks_172



        cmp     r15b,240
        jae     NEAR $L$_next_16_overflow_176
        vpaddd  zmm7,zmm2,zmm28
        vpaddd  zmm10,zmm7,zmm27
        vpaddd  zmm11,zmm10,zmm27
        vpaddd  zmm12,zmm11,zmm27
        jmp     NEAR $L$_next_16_ok_176
$L$_next_16_overflow_176:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm12,ZMMWORD[ddq_add_4444]
        vpaddd  zmm7,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm10,zmm7,zmm12
        vpaddd  zmm11,zmm10,zmm12
        vpaddd  zmm12,zmm11,zmm12
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vpshufb zmm12,zmm12,zmm29
$L$_next_16_ok_176:
        vshufi64x2      zmm2,zmm12,zmm12,255
        add     r15b,16

        vmovdqu8        zmm0,ZMMWORD[256+r11*1+r9]
        vmovdqu8        zmm3,ZMMWORD[320+r11*1+r9]
        vmovdqu8        zmm4,ZMMWORD[384+r11*1+r9]
        vmovdqu8        zmm5,ZMMWORD[448+r11*1+r9]


        vbroadcastf64x2 zmm6,ZMMWORD[rcx]
        vpxorq  zmm7,zmm7,zmm6
        vpxorq  zmm10,zmm10,zmm6
        vpxorq  zmm11,zmm11,zmm6
        vpxorq  zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[16+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[32+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[48+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[64+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[80+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[96+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[112+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[128+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[144+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[160+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[176+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[192+rcx]
        vaesenclast     zmm7,zmm7,zmm6
        vaesenclast     zmm10,zmm10,zmm6
        vaesenclast     zmm11,zmm11,zmm6
        vaesenclast     zmm12,zmm12,zmm6


        vpxorq  zmm7,zmm7,zmm0
        vpxorq  zmm10,zmm10,zmm3
        vpxorq  zmm11,zmm11,zmm4
        vpxorq  zmm12,zmm12,zmm5


        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[256+r11*1+r10],zmm7
        vmovdqu8        ZMMWORD[320+r11*1+r10],zmm10
        vmovdqu8        ZMMWORD[384+r11*1+r10],zmm11
        vmovdqu8        ZMMWORD[448+r11*1+r10],zmm12

        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vpshufb zmm12,zmm12,zmm29
        vmovdqa64       ZMMWORD[1024+rsp],zmm7
        vmovdqa64       ZMMWORD[1088+rsp],zmm10
        vmovdqa64       ZMMWORD[1152+rsp],zmm11
        vmovdqa64       ZMMWORD[1216+rsp],zmm12
        test    r14,r14
        jnz     NEAR $L$_skip_hkeys_precomputation_177
        vmovdqu64       zmm3,ZMMWORD[640+rsp]


        vshufi64x2      zmm3,zmm3,zmm3,0x00

        vmovdqu64       zmm4,ZMMWORD[576+rsp]
        vmovdqu64       zmm5,ZMMWORD[512+rsp]

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[448+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[384+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[320+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[256+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[192+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[128+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[64+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[rsp],zmm5
$L$_skip_hkeys_precomputation_177:
        mov     r14,1
        add     r11,512
        sub     r13,512

        cmp     r13,768
        jb      NEAR $L$_no_more_big_nblocks_172
$L$_encrypt_big_nblocks_172:
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_178
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_178
$L$_16_blocks_overflow_178:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_178:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[192+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm26,zmm10,zmm15
        vpxorq  zmm24,zmm6,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqa64       ZMMWORD[1280+rsp],zmm0
        vmovdqa64       ZMMWORD[1344+rsp],zmm3
        vmovdqa64       ZMMWORD[1408+rsp],zmm4
        vmovdqa64       ZMMWORD[1472+rsp],zmm5
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_179
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_179
$L$_16_blocks_overflow_179:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_179:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[256+rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[320+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[384+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[448+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[256+r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[320+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[384+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[448+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vpternlogq      zmm24,zmm6,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[256+r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[320+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[384+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[448+r11*1+r10],zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqa64       ZMMWORD[768+rsp],zmm0
        vmovdqa64       ZMMWORD[832+rsp],zmm3
        vmovdqa64       ZMMWORD[896+rsp],zmm4
        vmovdqa64       ZMMWORD[960+rsp],zmm5
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_180
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_180
$L$_16_blocks_overflow_180:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_180:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[512+r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[576+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[640+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[704+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]


        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96

        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpternlogq      zmm6,zmm12,zmm15,0x96
        vpxorq  zmm6,zmm6,zmm24
        vpternlogq      zmm7,zmm13,zmm10,0x96
        vpxorq  zmm7,zmm7,zmm25
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vextracti64x4   ymm12,zmm6,1
        vpxorq  ymm6,ymm6,ymm12
        vextracti32x4   xmm12,ymm6,1
        vpxorq  xmm6,xmm6,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm6,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[512+r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[576+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[640+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[704+r11*1+r10],zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqa64       ZMMWORD[1024+rsp],zmm0
        vmovdqa64       ZMMWORD[1088+rsp],zmm3
        vmovdqa64       ZMMWORD[1152+rsp],zmm4
        vmovdqa64       ZMMWORD[1216+rsp],zmm5
        vmovdqa64       zmm14,zmm6

        add     r11,768
        sub     r13,768
        cmp     r13,768
        jae     NEAR $L$_encrypt_big_nblocks_172

$L$_no_more_big_nblocks_172:

        cmp     r13,512
        jae     NEAR $L$_encrypt_32_blocks_172

        cmp     r13,256
        jae     NEAR $L$_encrypt_16_blocks_172
$L$_encrypt_0_blocks_ghash_32_172:
        mov     r10d,r13d
        and     r10d,~15
        mov     ebx,256
        sub     ebx,r10d
        vmovdqa64       zmm13,ZMMWORD[768+rsp]
        vpxorq  zmm13,zmm13,zmm14
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[832+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpxorq  zmm26,zmm4,zmm10
        vpxorq  zmm24,zmm0,zmm6
        vpxorq  zmm25,zmm3,zmm7
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[896+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[960+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        add     ebx,256
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_181

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_181
        jb      NEAR $L$_last_num_blocks_is_7_1_181


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_181
        jb      NEAR $L$_last_num_blocks_is_11_9_181


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_181
        ja      NEAR $L$_last_num_blocks_is_16_181
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_181
        jmp     NEAR $L$_last_num_blocks_is_13_181

$L$_last_num_blocks_is_11_9_181:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_181
        ja      NEAR $L$_last_num_blocks_is_11_181
        jmp     NEAR $L$_last_num_blocks_is_9_181

$L$_last_num_blocks_is_7_1_181:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_181
        jb      NEAR $L$_last_num_blocks_is_3_1_181

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_181
        je      NEAR $L$_last_num_blocks_is_6_181
        jmp     NEAR $L$_last_num_blocks_is_5_181

$L$_last_num_blocks_is_3_1_181:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_181
        je      NEAR $L$_last_num_blocks_is_2_181
$L$_last_num_blocks_is_1_181:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_182
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_182

$L$_16_blocks_overflow_182:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_182:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc xmm0,xmm0,xmm31
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb xmm17,xmm0,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_183





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_183
$L$_small_initial_partial_block_183:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11


        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm0,XMMWORD[POLY2]


        vpclmulqdq      xmm3,xmm0,xmm25,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm3,xmm25,xmm3


        vpclmulqdq      xmm4,xmm0,xmm3,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm14,xmm0,xmm3,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm4,xmm24,0x96












        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_183
$L$_small_initial_compute_done_183:
$L$_after_reduction_183:
        jmp     NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_2_181:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_184
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_184

$L$_16_blocks_overflow_184:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_184:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc ymm0,ymm0,ymm31
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb ymm17,ymm0,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_185





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_185
$L$_small_initial_partial_block_185:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_185:

        or      r13,r13
        je      NEAR $L$_after_reduction_185
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_185:
        jmp     NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_3_181:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_186
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_186

$L$_16_blocks_overflow_186:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_186:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_187





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_187
$L$_small_initial_partial_block_187:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_187:

        or      r13,r13
        je      NEAR $L$_after_reduction_187
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_187:
        jmp     NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_4_181:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_188
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_188

$L$_16_blocks_overflow_188:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_188:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_189





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_189
$L$_small_initial_partial_block_189:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_189:

        or      r13,r13
        je      NEAR $L$_after_reduction_189
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_189:
        jmp     NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_5_181:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_190
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_190

$L$_16_blocks_overflow_190:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_190:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb xmm19,xmm3,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_191





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_191
$L$_small_initial_partial_block_191:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_191:

        or      r13,r13
        je      NEAR $L$_after_reduction_191
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_191:
        jmp     NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_6_181:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_192
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_192

$L$_16_blocks_overflow_192:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_192:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb ymm19,ymm3,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_193





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_193
$L$_small_initial_partial_block_193:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_193:

        or      r13,r13
        je      NEAR $L$_after_reduction_193
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_193:
        jmp     NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_7_181:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_194
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_194

$L$_16_blocks_overflow_194:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_194:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_195





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_195
$L$_small_initial_partial_block_195:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_195:

        or      r13,r13
        je      NEAR $L$_after_reduction_195
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_195:
        jmp     NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_8_181:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_196
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_196

$L$_16_blocks_overflow_196:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_196:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_197





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_197
$L$_small_initial_partial_block_197:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_197:

        or      r13,r13
        je      NEAR $L$_after_reduction_197
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_197:
        jmp     NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_9_181:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_198
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_198

$L$_16_blocks_overflow_198:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_198:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb xmm20,xmm4,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_199





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_199
$L$_small_initial_partial_block_199:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_199:

        or      r13,r13
        je      NEAR $L$_after_reduction_199
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_199:
        jmp     NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_10_181:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_200
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_200

$L$_16_blocks_overflow_200:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_200:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb ymm20,ymm4,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_201





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_201
$L$_small_initial_partial_block_201:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_201:

        or      r13,r13
        je      NEAR $L$_after_reduction_201
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_201:
        jmp     NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_11_181:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_202
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_202

$L$_16_blocks_overflow_202:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_202:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_203





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_203
$L$_small_initial_partial_block_203:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_203:

        or      r13,r13
        je      NEAR $L$_after_reduction_203
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_203:
        jmp     NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_12_181:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_204
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_204

$L$_16_blocks_overflow_204:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_204:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_205





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_205
$L$_small_initial_partial_block_205:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_205:

        or      r13,r13
        je      NEAR $L$_after_reduction_205
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_205:
        jmp     NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_13_181:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_206
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_206

$L$_16_blocks_overflow_206:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_206:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb xmm21,xmm5,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_207





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_207
$L$_small_initial_partial_block_207:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_207:

        or      r13,r13
        je      NEAR $L$_after_reduction_207
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_207:
        jmp     NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_14_181:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_208
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_208

$L$_16_blocks_overflow_208:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_208:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb ymm21,ymm5,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_209





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_209
$L$_small_initial_partial_block_209:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_209:

        or      r13,r13
        je      NEAR $L$_after_reduction_209
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_209:
        jmp     NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_15_181:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_210
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_210

$L$_16_blocks_overflow_210:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_210:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_211





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_211
$L$_small_initial_partial_block_211:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_211:

        or      r13,r13
        je      NEAR $L$_after_reduction_211
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_211:
        jmp     NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_16_181:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_212
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_212

$L$_16_blocks_overflow_212:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_212:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_213:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_213:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_213:
        jmp     NEAR $L$_last_blocks_done_181
$L$_last_num_blocks_is_0_181:
        vmovdqa64       zmm13,ZMMWORD[1024+rsp]
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1088+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1152+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1216+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_181:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_172
$L$_encrypt_32_blocks_172:
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_214
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_214
$L$_16_blocks_overflow_214:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_214:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[192+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm26,zmm10,zmm15
        vpxorq  zmm24,zmm6,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqa64       ZMMWORD[1280+rsp],zmm0
        vmovdqa64       ZMMWORD[1344+rsp],zmm3
        vmovdqa64       ZMMWORD[1408+rsp],zmm4
        vmovdqa64       ZMMWORD[1472+rsp],zmm5
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_215
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_215
$L$_16_blocks_overflow_215:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_215:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[256+rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[320+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[384+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[448+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[256+r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[320+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[384+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[448+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vpternlogq      zmm24,zmm6,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[256+r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[320+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[384+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[448+r11*1+r10],zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqa64       ZMMWORD[768+rsp],zmm0
        vmovdqa64       ZMMWORD[832+rsp],zmm3
        vmovdqa64       ZMMWORD[896+rsp],zmm4
        vmovdqa64       ZMMWORD[960+rsp],zmm5
        vmovdqa64       zmm13,ZMMWORD[1280+rsp]
        vmovdqu64       zmm12,ZMMWORD[512+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1344+rsp]
        vmovdqu64       zmm12,ZMMWORD[576+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1408+rsp]
        vmovdqu64       zmm12,ZMMWORD[640+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1472+rsp]
        vmovdqu64       zmm12,ZMMWORD[704+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

        sub     r13,512
        add     r11,512
        mov     r10d,r13d
        and     r10d,~15
        mov     ebx,512
        sub     ebx,r10d
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_216

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_216
        jb      NEAR $L$_last_num_blocks_is_7_1_216


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_216
        jb      NEAR $L$_last_num_blocks_is_11_9_216


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_216
        ja      NEAR $L$_last_num_blocks_is_16_216
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_216
        jmp     NEAR $L$_last_num_blocks_is_13_216

$L$_last_num_blocks_is_11_9_216:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_216
        ja      NEAR $L$_last_num_blocks_is_11_216
        jmp     NEAR $L$_last_num_blocks_is_9_216

$L$_last_num_blocks_is_7_1_216:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_216
        jb      NEAR $L$_last_num_blocks_is_3_1_216

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_216
        je      NEAR $L$_last_num_blocks_is_6_216
        jmp     NEAR $L$_last_num_blocks_is_5_216

$L$_last_num_blocks_is_3_1_216:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_216
        je      NEAR $L$_last_num_blocks_is_2_216
$L$_last_num_blocks_is_1_216:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_217
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_217

$L$_16_blocks_overflow_217:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_217:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc xmm0,xmm0,xmm31
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb xmm17,xmm0,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_218





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_218
$L$_small_initial_partial_block_218:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11


        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm0,XMMWORD[POLY2]


        vpclmulqdq      xmm3,xmm0,xmm25,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm3,xmm25,xmm3


        vpclmulqdq      xmm4,xmm0,xmm3,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm14,xmm0,xmm3,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm4,xmm24,0x96












        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_218
$L$_small_initial_compute_done_218:
$L$_after_reduction_218:
        jmp     NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_2_216:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_219
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_219

$L$_16_blocks_overflow_219:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_219:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc ymm0,ymm0,ymm31
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb ymm17,ymm0,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_220





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_220
$L$_small_initial_partial_block_220:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_220:

        or      r13,r13
        je      NEAR $L$_after_reduction_220
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_220:
        jmp     NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_3_216:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_221
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_221

$L$_16_blocks_overflow_221:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_221:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_222





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_222
$L$_small_initial_partial_block_222:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_222:

        or      r13,r13
        je      NEAR $L$_after_reduction_222
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_222:
        jmp     NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_4_216:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_223
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_223

$L$_16_blocks_overflow_223:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_223:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_224





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_224
$L$_small_initial_partial_block_224:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_224:

        or      r13,r13
        je      NEAR $L$_after_reduction_224
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_224:
        jmp     NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_5_216:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_225
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_225

$L$_16_blocks_overflow_225:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_225:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb xmm19,xmm3,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_226





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_226
$L$_small_initial_partial_block_226:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_226:

        or      r13,r13
        je      NEAR $L$_after_reduction_226
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_226:
        jmp     NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_6_216:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_227
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_227

$L$_16_blocks_overflow_227:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_227:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb ymm19,ymm3,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_228





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_228
$L$_small_initial_partial_block_228:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_228:

        or      r13,r13
        je      NEAR $L$_after_reduction_228
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_228:
        jmp     NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_7_216:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_229
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_229

$L$_16_blocks_overflow_229:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_229:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_230





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_230
$L$_small_initial_partial_block_230:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_230:

        or      r13,r13
        je      NEAR $L$_after_reduction_230
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_230:
        jmp     NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_8_216:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_231
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_231

$L$_16_blocks_overflow_231:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_231:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_232





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_232
$L$_small_initial_partial_block_232:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_232:

        or      r13,r13
        je      NEAR $L$_after_reduction_232
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_232:
        jmp     NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_9_216:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_233
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_233

$L$_16_blocks_overflow_233:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_233:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb xmm20,xmm4,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_234





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_234
$L$_small_initial_partial_block_234:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_234:

        or      r13,r13
        je      NEAR $L$_after_reduction_234
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_234:
        jmp     NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_10_216:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_235
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_235

$L$_16_blocks_overflow_235:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_235:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb ymm20,ymm4,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_236





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_236
$L$_small_initial_partial_block_236:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_236:

        or      r13,r13
        je      NEAR $L$_after_reduction_236
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_236:
        jmp     NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_11_216:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_237
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_237

$L$_16_blocks_overflow_237:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_237:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_238





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_238
$L$_small_initial_partial_block_238:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_238:

        or      r13,r13
        je      NEAR $L$_after_reduction_238
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_238:
        jmp     NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_12_216:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_239
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_239

$L$_16_blocks_overflow_239:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_239:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_240





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_240
$L$_small_initial_partial_block_240:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_240:

        or      r13,r13
        je      NEAR $L$_after_reduction_240
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_240:
        jmp     NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_13_216:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_241
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_241

$L$_16_blocks_overflow_241:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_241:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb xmm21,xmm5,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_242





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_242
$L$_small_initial_partial_block_242:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_242:

        or      r13,r13
        je      NEAR $L$_after_reduction_242
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_242:
        jmp     NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_14_216:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_243
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_243

$L$_16_blocks_overflow_243:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_243:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb ymm21,ymm5,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_244





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_244
$L$_small_initial_partial_block_244:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_244:

        or      r13,r13
        je      NEAR $L$_after_reduction_244
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_244:
        jmp     NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_15_216:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_245
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_245

$L$_16_blocks_overflow_245:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_245:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_246





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_246
$L$_small_initial_partial_block_246:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_246:

        or      r13,r13
        je      NEAR $L$_after_reduction_246
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_246:
        jmp     NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_16_216:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_247
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_247

$L$_16_blocks_overflow_247:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_247:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_248:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_248:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_248:
        jmp     NEAR $L$_last_blocks_done_216
$L$_last_num_blocks_is_0_216:
        vmovdqa64       zmm13,ZMMWORD[768+rsp]
        vpxorq  zmm13,zmm13,zmm14
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[832+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpxorq  zmm26,zmm4,zmm10
        vpxorq  zmm24,zmm0,zmm6
        vpxorq  zmm25,zmm3,zmm7
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[896+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[960+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_216:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_172
$L$_encrypt_16_blocks_172:
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_249
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_249
$L$_16_blocks_overflow_249:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_249:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[192+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm26,zmm10,zmm15
        vpxorq  zmm24,zmm6,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqa64       ZMMWORD[1280+rsp],zmm0
        vmovdqa64       ZMMWORD[1344+rsp],zmm3
        vmovdqa64       ZMMWORD[1408+rsp],zmm4
        vmovdqa64       ZMMWORD[1472+rsp],zmm5
        vmovdqa64       zmm13,ZMMWORD[1024+rsp]
        vmovdqu64       zmm12,ZMMWORD[256+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1088+rsp]
        vmovdqu64       zmm12,ZMMWORD[320+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1152+rsp]
        vmovdqu64       zmm12,ZMMWORD[384+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1216+rsp]
        vmovdqu64       zmm12,ZMMWORD[448+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        sub     r13,256
        add     r11,256
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_250

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_250
        jb      NEAR $L$_last_num_blocks_is_7_1_250


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_250
        jb      NEAR $L$_last_num_blocks_is_11_9_250


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_250
        ja      NEAR $L$_last_num_blocks_is_16_250
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_250
        jmp     NEAR $L$_last_num_blocks_is_13_250

$L$_last_num_blocks_is_11_9_250:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_250
        ja      NEAR $L$_last_num_blocks_is_11_250
        jmp     NEAR $L$_last_num_blocks_is_9_250

$L$_last_num_blocks_is_7_1_250:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_250
        jb      NEAR $L$_last_num_blocks_is_3_1_250

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_250
        je      NEAR $L$_last_num_blocks_is_6_250
        jmp     NEAR $L$_last_num_blocks_is_5_250

$L$_last_num_blocks_is_3_1_250:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_250
        je      NEAR $L$_last_num_blocks_is_2_250
$L$_last_num_blocks_is_1_250:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_251
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_251

$L$_16_blocks_overflow_251:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_251:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc xmm0,xmm0,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc xmm0,xmm0,xmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb xmm17,xmm0,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_252





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_252
$L$_small_initial_partial_block_252:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11











        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_252
$L$_small_initial_compute_done_252:
$L$_after_reduction_252:
        jmp     NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_2_250:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_253
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_253

$L$_16_blocks_overflow_253:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_253:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc ymm0,ymm0,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc ymm0,ymm0,ymm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb ymm17,ymm0,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_254





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_254
$L$_small_initial_partial_block_254:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_254:

        or      r13,r13
        je      NEAR $L$_after_reduction_254
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_254:
        jmp     NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_3_250:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_255
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_255

$L$_16_blocks_overflow_255:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_255:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_256





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_256
$L$_small_initial_partial_block_256:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_256:

        or      r13,r13
        je      NEAR $L$_after_reduction_256
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_256:
        jmp     NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_4_250:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_257
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_257

$L$_16_blocks_overflow_257:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_257:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_258





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_258
$L$_small_initial_partial_block_258:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_258:

        or      r13,r13
        je      NEAR $L$_after_reduction_258
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_258:
        jmp     NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_5_250:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_259
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_259

$L$_16_blocks_overflow_259:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_259:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb xmm19,xmm3,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_260





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_260
$L$_small_initial_partial_block_260:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_260:

        or      r13,r13
        je      NEAR $L$_after_reduction_260
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_260:
        jmp     NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_6_250:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_261
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_261

$L$_16_blocks_overflow_261:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_261:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb ymm19,ymm3,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_262





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_262
$L$_small_initial_partial_block_262:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_262:

        or      r13,r13
        je      NEAR $L$_after_reduction_262
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_262:
        jmp     NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_7_250:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_263
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_263

$L$_16_blocks_overflow_263:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_263:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_264





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_264
$L$_small_initial_partial_block_264:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_264:

        or      r13,r13
        je      NEAR $L$_after_reduction_264
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_264:
        jmp     NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_8_250:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_265
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_265

$L$_16_blocks_overflow_265:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_265:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_266





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_266
$L$_small_initial_partial_block_266:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_266:

        or      r13,r13
        je      NEAR $L$_after_reduction_266
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_266:
        jmp     NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_9_250:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_267
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_267

$L$_16_blocks_overflow_267:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_267:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb xmm20,xmm4,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_268





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_268
$L$_small_initial_partial_block_268:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_268:

        or      r13,r13
        je      NEAR $L$_after_reduction_268
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_268:
        jmp     NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_10_250:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_269
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_269

$L$_16_blocks_overflow_269:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_269:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb ymm20,ymm4,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_270





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_270
$L$_small_initial_partial_block_270:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_270:

        or      r13,r13
        je      NEAR $L$_after_reduction_270
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_270:
        jmp     NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_11_250:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_271
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_271

$L$_16_blocks_overflow_271:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_271:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_272





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_272
$L$_small_initial_partial_block_272:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_272:

        or      r13,r13
        je      NEAR $L$_after_reduction_272
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_272:
        jmp     NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_12_250:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_273
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_273

$L$_16_blocks_overflow_273:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_273:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_274





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_274
$L$_small_initial_partial_block_274:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_274:

        or      r13,r13
        je      NEAR $L$_after_reduction_274
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_274:
        jmp     NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_13_250:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_275
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_275

$L$_16_blocks_overflow_275:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_275:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb xmm21,xmm5,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_276





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_276
$L$_small_initial_partial_block_276:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_276:

        or      r13,r13
        je      NEAR $L$_after_reduction_276
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_276:
        jmp     NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_14_250:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_277
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_277

$L$_16_blocks_overflow_277:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_277:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb ymm21,ymm5,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_278





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_278
$L$_small_initial_partial_block_278:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_278:

        or      r13,r13
        je      NEAR $L$_after_reduction_278
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_278:
        jmp     NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_15_250:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_279
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_279

$L$_16_blocks_overflow_279:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_279:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_280





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_280
$L$_small_initial_partial_block_280:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_280:

        or      r13,r13
        je      NEAR $L$_after_reduction_280
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_280:
        jmp     NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_16_250:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_281
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_281

$L$_16_blocks_overflow_281:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_281:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_282:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_282:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_282:
        jmp     NEAR $L$_last_blocks_done_250
$L$_last_num_blocks_is_0_250:
        vmovdqa64       zmm13,ZMMWORD[1280+rsp]
        vmovdqu64       zmm12,ZMMWORD[512+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1344+rsp]
        vmovdqu64       zmm12,ZMMWORD[576+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1408+rsp]
        vmovdqu64       zmm12,ZMMWORD[640+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1472+rsp]
        vmovdqu64       zmm12,ZMMWORD[704+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_250:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_172

$L$_message_below_32_blocks_172:


        sub     r13,256
        add     r11,256
        mov     r10d,r13d
        test    r14,r14
        jnz     NEAR $L$_skip_hkeys_precomputation_283
        vmovdqu64       zmm3,ZMMWORD[640+rsp]


        vshufi64x2      zmm3,zmm3,zmm3,0x00

        vmovdqu64       zmm4,ZMMWORD[576+rsp]
        vmovdqu64       zmm5,ZMMWORD[512+rsp]

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[448+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[384+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[320+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[256+rsp],zmm5
$L$_skip_hkeys_precomputation_283:
        mov     r14,1
        and     r10d,~15
        mov     ebx,512
        sub     ebx,r10d
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_284

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_284
        jb      NEAR $L$_last_num_blocks_is_7_1_284


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_284
        jb      NEAR $L$_last_num_blocks_is_11_9_284


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_284
        ja      NEAR $L$_last_num_blocks_is_16_284
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_284
        jmp     NEAR $L$_last_num_blocks_is_13_284

$L$_last_num_blocks_is_11_9_284:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_284
        ja      NEAR $L$_last_num_blocks_is_11_284
        jmp     NEAR $L$_last_num_blocks_is_9_284

$L$_last_num_blocks_is_7_1_284:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_284
        jb      NEAR $L$_last_num_blocks_is_3_1_284

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_284
        je      NEAR $L$_last_num_blocks_is_6_284
        jmp     NEAR $L$_last_num_blocks_is_5_284

$L$_last_num_blocks_is_3_1_284:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_284
        je      NEAR $L$_last_num_blocks_is_2_284
$L$_last_num_blocks_is_1_284:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_285
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_285

$L$_16_blocks_overflow_285:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_285:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc xmm0,xmm0,xmm31
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb xmm17,xmm0,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_286





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_286
$L$_small_initial_partial_block_286:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11


        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm0,XMMWORD[POLY2]


        vpclmulqdq      xmm3,xmm0,xmm25,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm3,xmm25,xmm3


        vpclmulqdq      xmm4,xmm0,xmm3,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm14,xmm0,xmm3,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm4,xmm24,0x96












        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_286
$L$_small_initial_compute_done_286:
$L$_after_reduction_286:
        jmp     NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_2_284:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_287
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_287

$L$_16_blocks_overflow_287:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_287:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc ymm0,ymm0,ymm31
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb ymm17,ymm0,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_288





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_288
$L$_small_initial_partial_block_288:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_288:

        or      r13,r13
        je      NEAR $L$_after_reduction_288
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_288:
        jmp     NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_3_284:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_289
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_289

$L$_16_blocks_overflow_289:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_289:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_290





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_290
$L$_small_initial_partial_block_290:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_290:

        or      r13,r13
        je      NEAR $L$_after_reduction_290
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_290:
        jmp     NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_4_284:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_291
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_291

$L$_16_blocks_overflow_291:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_291:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_292





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_292
$L$_small_initial_partial_block_292:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_292:

        or      r13,r13
        je      NEAR $L$_after_reduction_292
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_292:
        jmp     NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_5_284:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_293
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_293

$L$_16_blocks_overflow_293:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_293:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb xmm19,xmm3,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_294





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_294
$L$_small_initial_partial_block_294:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_294:

        or      r13,r13
        je      NEAR $L$_after_reduction_294
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_294:
        jmp     NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_6_284:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_295
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_295

$L$_16_blocks_overflow_295:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_295:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb ymm19,ymm3,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_296





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_296
$L$_small_initial_partial_block_296:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_296:

        or      r13,r13
        je      NEAR $L$_after_reduction_296
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_296:
        jmp     NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_7_284:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_297
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_297

$L$_16_blocks_overflow_297:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_297:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_298





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_298
$L$_small_initial_partial_block_298:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_298:

        or      r13,r13
        je      NEAR $L$_after_reduction_298
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_298:
        jmp     NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_8_284:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_299
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_299

$L$_16_blocks_overflow_299:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_299:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_300





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_300
$L$_small_initial_partial_block_300:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_300:

        or      r13,r13
        je      NEAR $L$_after_reduction_300
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_300:
        jmp     NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_9_284:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_301
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_301

$L$_16_blocks_overflow_301:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_301:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb xmm20,xmm4,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_302





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_302
$L$_small_initial_partial_block_302:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_302:

        or      r13,r13
        je      NEAR $L$_after_reduction_302
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_302:
        jmp     NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_10_284:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_303
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_303

$L$_16_blocks_overflow_303:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_303:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb ymm20,ymm4,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_304





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_304
$L$_small_initial_partial_block_304:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_304:

        or      r13,r13
        je      NEAR $L$_after_reduction_304
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_304:
        jmp     NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_11_284:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_305
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_305

$L$_16_blocks_overflow_305:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_305:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_306





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_306
$L$_small_initial_partial_block_306:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_306:

        or      r13,r13
        je      NEAR $L$_after_reduction_306
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_306:
        jmp     NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_12_284:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_307
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_307

$L$_16_blocks_overflow_307:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_307:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_308





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_308
$L$_small_initial_partial_block_308:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_308:

        or      r13,r13
        je      NEAR $L$_after_reduction_308
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_308:
        jmp     NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_13_284:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_309
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_309

$L$_16_blocks_overflow_309:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_309:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb xmm21,xmm5,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_310





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_310
$L$_small_initial_partial_block_310:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_310:

        or      r13,r13
        je      NEAR $L$_after_reduction_310
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_310:
        jmp     NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_14_284:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_311
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_311

$L$_16_blocks_overflow_311:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_311:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb ymm21,ymm5,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_312





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_312
$L$_small_initial_partial_block_312:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_312:

        or      r13,r13
        je      NEAR $L$_after_reduction_312
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_312:
        jmp     NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_15_284:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_313
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_313

$L$_16_blocks_overflow_313:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_313:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_314





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_314
$L$_small_initial_partial_block_314:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_314:

        or      r13,r13
        je      NEAR $L$_after_reduction_314
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_314:
        jmp     NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_16_284:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_315
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_315

$L$_16_blocks_overflow_315:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_315:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_316:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_316:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_316:
        jmp     NEAR $L$_last_blocks_done_284
$L$_last_num_blocks_is_0_284:
        vmovdqa64       zmm13,ZMMWORD[768+rsp]
        vpxorq  zmm13,zmm13,zmm14
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[832+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpxorq  zmm26,zmm4,zmm10
        vpxorq  zmm24,zmm0,zmm6
        vpxorq  zmm25,zmm3,zmm7
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[896+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[960+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_284:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_172

$L$_message_below_equal_16_blocks_172:


        mov     r12d,r13d
        add     r12d,15
        shr     r12d,4
        cmp     r12,8
        je      NEAR $L$_small_initial_num_blocks_is_8_317
        jl      NEAR $L$_small_initial_num_blocks_is_7_1_317


        cmp     r12,12
        je      NEAR $L$_small_initial_num_blocks_is_12_317
        jl      NEAR $L$_small_initial_num_blocks_is_11_9_317


        cmp     r12,16
        je      NEAR $L$_small_initial_num_blocks_is_16_317
        cmp     r12,15
        je      NEAR $L$_small_initial_num_blocks_is_15_317
        cmp     r12,14
        je      NEAR $L$_small_initial_num_blocks_is_14_317
        jmp     NEAR $L$_small_initial_num_blocks_is_13_317

$L$_small_initial_num_blocks_is_11_9_317:

        cmp     r12,11
        je      NEAR $L$_small_initial_num_blocks_is_11_317
        cmp     r12,10
        je      NEAR $L$_small_initial_num_blocks_is_10_317
        jmp     NEAR $L$_small_initial_num_blocks_is_9_317

$L$_small_initial_num_blocks_is_7_1_317:
        cmp     r12,4
        je      NEAR $L$_small_initial_num_blocks_is_4_317
        jl      NEAR $L$_small_initial_num_blocks_is_3_1_317

        cmp     r12,7
        je      NEAR $L$_small_initial_num_blocks_is_7_317
        cmp     r12,6
        je      NEAR $L$_small_initial_num_blocks_is_6_317
        jmp     NEAR $L$_small_initial_num_blocks_is_5_317

$L$_small_initial_num_blocks_is_3_1_317:

        cmp     r12,3
        je      NEAR $L$_small_initial_num_blocks_is_3_317
        cmp     r12,2
        je      NEAR $L$_small_initial_num_blocks_is_2_317





$L$_small_initial_num_blocks_is_1_317:
        vmovdqa64       xmm29,XMMWORD[SHUF_MASK]
        vpaddd  xmm0,xmm2,XMMWORD[ONE]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,0
        vpshufb xmm0,xmm0,xmm29
        vmovdqu8        xmm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     xmm0,xmm0,xmm15
        vpxorq  xmm0,xmm0,xmm6
        vextracti32x4   xmm12,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb xmm6,xmm0,xmm29
        vextracti32x4   xmm13,zmm6,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_318





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm6,xmm20,0x01
        vpclmulqdq      xmm5,xmm6,xmm20,0x10
        vpclmulqdq      xmm0,xmm6,xmm20,0x11
        vpclmulqdq      xmm3,xmm6,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_318
$L$_small_initial_partial_block_318:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12











        vpxorq  xmm14,xmm14,xmm13

        jmp     NEAR $L$_after_reduction_318
$L$_small_initial_compute_done_318:
$L$_after_reduction_318:
        jmp     NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_2_317:
        vmovdqa64       ymm29,YMMWORD[SHUF_MASK]
        vshufi64x2      ymm0,ymm2,ymm2,0
        vpaddd  ymm0,ymm0,YMMWORD[ddq_add_1234]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,1
        vpshufb ymm0,ymm0,ymm29
        vmovdqu8        ymm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     ymm0,ymm0,ymm15
        vpxorq  ymm0,ymm0,ymm6
        vextracti32x4   xmm12,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb ymm6,ymm0,ymm29
        vextracti32x4   xmm13,zmm6,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_319





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm6,ymm20,0x01
        vpclmulqdq      ymm5,ymm6,ymm20,0x10
        vpclmulqdq      ymm0,ymm6,ymm20,0x11
        vpclmulqdq      ymm3,ymm6,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_319
$L$_small_initial_partial_block_319:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm6,xmm20,0x01
        vpclmulqdq      xmm5,xmm6,xmm20,0x10
        vpclmulqdq      xmm0,xmm6,xmm20,0x11
        vpclmulqdq      xmm3,xmm6,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_319:

        or      r13,r13
        je      NEAR $L$_after_reduction_319
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_319:
        jmp     NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_3_317:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,2
        vpshufb zmm0,zmm0,zmm29
        vmovdqu8        zmm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vextracti32x4   xmm12,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm6,zmm0,zmm29
        vextracti32x4   xmm13,zmm6,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_320





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_320
$L$_small_initial_partial_block_320:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm6,ymm20,0x01
        vpclmulqdq      ymm5,ymm6,ymm20,0x10
        vpclmulqdq      ymm0,ymm6,ymm20,0x11
        vpclmulqdq      ymm3,ymm6,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_320:

        or      r13,r13
        je      NEAR $L$_after_reduction_320
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_320:
        jmp     NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_4_317:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,3
        vpshufb zmm0,zmm0,zmm29
        vmovdqu8        zmm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vextracti32x4   xmm12,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm6,zmm0,zmm29
        vextracti32x4   xmm13,zmm6,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_321





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_321
$L$_small_initial_partial_block_321:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_321:

        or      r13,r13
        je      NEAR $L$_after_reduction_321
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_321:
        jmp     NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_5_317:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,0
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     xmm3,xmm3,xmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  xmm3,xmm3,xmm7
        vextracti32x4   xmm12,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm0,zmm29
        vpshufb xmm7,xmm3,xmm29
        vextracti32x4   xmm13,zmm7,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_322





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm7,xmm20,0x01
        vpclmulqdq      xmm5,xmm7,xmm20,0x10
        vpclmulqdq      xmm0,xmm7,xmm20,0x11
        vpclmulqdq      xmm3,xmm7,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_322
$L$_small_initial_partial_block_322:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_322:

        or      r13,r13
        je      NEAR $L$_after_reduction_322
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_322:
        jmp     NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_6_317:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,1
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     ymm3,ymm3,ymm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  ymm3,ymm3,ymm7
        vextracti32x4   xmm12,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm0,zmm29
        vpshufb ymm7,ymm3,ymm29
        vextracti32x4   xmm13,zmm7,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_323





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm7,ymm20,0x01
        vpclmulqdq      ymm5,ymm7,ymm20,0x10
        vpclmulqdq      ymm0,ymm7,ymm20,0x11
        vpclmulqdq      ymm3,ymm7,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_323
$L$_small_initial_partial_block_323:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm7,xmm20,0x01
        vpclmulqdq      xmm5,xmm7,xmm20,0x10
        vpclmulqdq      xmm0,xmm7,xmm20,0x11
        vpclmulqdq      xmm3,xmm7,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_323:

        or      r13,r13
        je      NEAR $L$_after_reduction_323
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_323:
        jmp     NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_7_317:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,2
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vextracti32x4   xmm12,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vextracti32x4   xmm13,zmm7,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_324





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm7,zmm20,0x01
        vpclmulqdq      zmm5,zmm7,zmm20,0x10
        vpclmulqdq      zmm0,zmm7,zmm20,0x11
        vpclmulqdq      zmm3,zmm7,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_324
$L$_small_initial_partial_block_324:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm7,ymm20,0x01
        vpclmulqdq      ymm5,ymm7,ymm20,0x10
        vpclmulqdq      ymm0,ymm7,ymm20,0x11
        vpclmulqdq      ymm3,ymm7,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_324:

        or      r13,r13
        je      NEAR $L$_after_reduction_324
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_324:
        jmp     NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_8_317:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,3
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vextracti32x4   xmm12,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vextracti32x4   xmm13,zmm7,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_325





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_325
$L$_small_initial_partial_block_325:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm7,zmm20,0x01
        vpclmulqdq      zmm5,zmm7,zmm20,0x10
        vpclmulqdq      zmm0,zmm7,zmm20,0x11
        vpclmulqdq      zmm3,zmm7,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_325:

        or      r13,r13
        je      NEAR $L$_after_reduction_325
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_325:
        jmp     NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_9_317:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,0
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     xmm4,xmm4,xmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  xmm4,xmm4,xmm10
        vextracti32x4   xmm12,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb xmm10,xmm4,xmm29
        vextracti32x4   xmm13,zmm10,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_326





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm10,xmm20,0x01
        vpclmulqdq      xmm5,xmm10,xmm20,0x10
        vpclmulqdq      xmm0,xmm10,xmm20,0x11
        vpclmulqdq      xmm3,xmm10,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_326
$L$_small_initial_partial_block_326:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_326:

        or      r13,r13
        je      NEAR $L$_after_reduction_326
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_326:
        jmp     NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_10_317:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,1
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     ymm4,ymm4,ymm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  ymm4,ymm4,ymm10
        vextracti32x4   xmm12,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb ymm10,ymm4,ymm29
        vextracti32x4   xmm13,zmm10,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_327





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm10,ymm20,0x01
        vpclmulqdq      ymm5,ymm10,ymm20,0x10
        vpclmulqdq      ymm0,ymm10,ymm20,0x11
        vpclmulqdq      ymm3,ymm10,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_327
$L$_small_initial_partial_block_327:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm10,xmm20,0x01
        vpclmulqdq      xmm5,xmm10,xmm20,0x10
        vpclmulqdq      xmm0,xmm10,xmm20,0x11
        vpclmulqdq      xmm3,xmm10,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_327:

        or      r13,r13
        je      NEAR $L$_after_reduction_327
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_327:
        jmp     NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_11_317:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,2
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vextracti32x4   xmm12,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb zmm10,zmm4,zmm29
        vextracti32x4   xmm13,zmm10,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_328





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm10,zmm20,0x01
        vpclmulqdq      zmm5,zmm10,zmm20,0x10
        vpclmulqdq      zmm0,zmm10,zmm20,0x11
        vpclmulqdq      zmm3,zmm10,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_328
$L$_small_initial_partial_block_328:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm10,ymm20,0x01
        vpclmulqdq      ymm5,ymm10,ymm20,0x10
        vpclmulqdq      ymm0,ymm10,ymm20,0x11
        vpclmulqdq      ymm3,ymm10,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_328:

        or      r13,r13
        je      NEAR $L$_after_reduction_328
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_328:
        jmp     NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_12_317:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,3
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vextracti32x4   xmm12,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb zmm10,zmm4,zmm29
        vextracti32x4   xmm13,zmm10,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_329





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_329
$L$_small_initial_partial_block_329:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm10,zmm20,0x01
        vpclmulqdq      zmm5,zmm10,zmm20,0x10
        vpclmulqdq      zmm0,zmm10,zmm20,0x11
        vpclmulqdq      zmm3,zmm10,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_329:

        or      r13,r13
        je      NEAR $L$_after_reduction_329
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_329:
        jmp     NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_13_317:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,0
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     xmm5,xmm5,xmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  xmm5,xmm5,xmm11
        vextracti32x4   xmm12,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb zmm10,zmm4,zmm29
        vpshufb xmm11,xmm5,xmm29
        vextracti32x4   xmm13,zmm11,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_330





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm11,xmm20,0x01
        vpclmulqdq      xmm5,xmm11,xmm20,0x10
        vpclmulqdq      xmm0,xmm11,xmm20,0x11
        vpclmulqdq      xmm3,xmm11,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_330
$L$_small_initial_partial_block_330:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_330:

        or      r13,r13
        je      NEAR $L$_after_reduction_330
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_330:
        jmp     NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_14_317:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,1
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     ymm5,ymm5,ymm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  ymm5,ymm5,ymm11
        vextracti32x4   xmm12,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb zmm10,zmm4,zmm29
        vpshufb ymm11,ymm5,ymm29
        vextracti32x4   xmm13,zmm11,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_331





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm11,ymm20,0x01
        vpclmulqdq      ymm5,ymm11,ymm20,0x10
        vpclmulqdq      ymm0,ymm11,ymm20,0x11
        vpclmulqdq      ymm3,ymm11,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_331
$L$_small_initial_partial_block_331:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm11,xmm20,0x01
        vpclmulqdq      xmm5,xmm11,xmm20,0x10
        vpclmulqdq      xmm0,xmm11,xmm20,0x11
        vpclmulqdq      xmm3,xmm11,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_331:

        or      r13,r13
        je      NEAR $L$_after_reduction_331
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_331:
        jmp     NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_15_317:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,2
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     zmm5,zmm5,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  zmm5,zmm5,zmm11
        vextracti32x4   xmm12,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb zmm10,zmm4,zmm29
        vpshufb zmm11,zmm5,zmm29
        vextracti32x4   xmm13,zmm11,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_332





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm11,zmm20,0x01
        vpclmulqdq      zmm5,zmm11,zmm20,0x10
        vpclmulqdq      zmm0,zmm11,zmm20,0x11
        vpclmulqdq      zmm3,zmm11,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_332
$L$_small_initial_partial_block_332:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm11,ymm20,0x01
        vpclmulqdq      ymm5,ymm11,ymm20,0x10
        vpclmulqdq      ymm0,ymm11,ymm20,0x11
        vpclmulqdq      ymm3,ymm11,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_332:

        or      r13,r13
        je      NEAR $L$_after_reduction_332
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_332:
        jmp     NEAR $L$_small_initial_blocks_encrypted_317
$L$_small_initial_num_blocks_is_16_317:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,3
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     zmm5,zmm5,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  zmm5,zmm5,zmm11
        vextracti32x4   xmm12,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb zmm10,zmm4,zmm29
        vpshufb zmm11,zmm5,zmm29
        vextracti32x4   xmm13,zmm11,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_333:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm11,zmm20,0x01
        vpclmulqdq      zmm5,zmm11,zmm20,0x10
        vpclmulqdq      zmm0,zmm11,zmm20,0x11
        vpclmulqdq      zmm3,zmm11,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_333:
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_333:
$L$_small_initial_blocks_encrypted_317:
$L$_ghash_done_172:
        vmovdqu64       XMMWORD[rdx],xmm2
        vmovdqu64       XMMWORD[64+rdx],xmm14
$L$_enc_dec_done_172:
        jmp     NEAR $L$exit_gcm_encrypt
ALIGN   32
$L$aes_gcm_encrypt_256_avx512:
        cmp     QWORD[112+rbp],0
        je      NEAR $L$_enc_dec_done_334
        xor     r14,r14
        vmovdqu64       xmm14,XMMWORD[64+rdx]

        mov     r11,QWORD[r8]
        or      r11,r11
        je      NEAR $L$_partial_block_done_335
        mov     r10d,16
        lea     r12,[byte_len_to_mask_table]
        cmp     QWORD[112+rbp],r10
        cmovc   r10,QWORD[112+rbp]
        add     r12,r10
        add     r12,r10
        kmovw   k1,[r12]
        vmovdqu8        xmm0{k1}{z},[r9]

        vmovdqu64       xmm3,XMMWORD[16+rdx]
        vmovdqu64       xmm4,XMMWORD[336+rdx]



        lea     r12,[SHIFT_MASK]
        add     r12,r11
        vmovdqu64       xmm5,XMMWORD[r12]
        vpshufb xmm3,xmm3,xmm5
        vpxorq  xmm3,xmm3,xmm0


        mov     r13,QWORD[112+rbp]
        add     r13,r11
        sub     r13,16
        jge     NEAR $L$_no_extra_mask_335
        sub     r12,r13
$L$_no_extra_mask_335:



        vmovdqu64       xmm0,XMMWORD[16+r12]
        vpand   xmm3,xmm3,xmm0
        vpshufb xmm3,xmm3,XMMWORD[SHUF_MASK]
        vpshufb xmm3,xmm3,xmm5
        vpxorq  xmm14,xmm14,xmm3
        cmp     r13,0
        jl      NEAR $L$_partial_incomplete_335

        vpclmulqdq      xmm7,xmm14,xmm4,0x11
        vpclmulqdq      xmm10,xmm14,xmm4,0x00
        vpclmulqdq      xmm11,xmm14,xmm4,0x01
        vpclmulqdq      xmm14,xmm14,xmm4,0x10
        vpxorq  xmm14,xmm14,xmm11

        vpsrldq xmm11,xmm14,8
        vpslldq xmm14,xmm14,8
        vpxorq  xmm7,xmm7,xmm11
        vpxorq  xmm14,xmm14,xmm10



        vmovdqu64       xmm11,XMMWORD[POLY2]

        vpclmulqdq      xmm10,xmm11,xmm14,0x01
        vpslldq xmm10,xmm10,8
        vpxorq  xmm14,xmm14,xmm10



        vpclmulqdq      xmm10,xmm11,xmm14,0x00
        vpsrldq xmm10,xmm10,4
        vpclmulqdq      xmm14,xmm11,xmm14,0x10
        vpslldq xmm14,xmm14,4

        vpternlogq      xmm14,xmm7,xmm10,0x96

        mov     QWORD[r8],0

        mov     r12,r11
        mov     r11,16
        sub     r11,r12
        jmp     NEAR $L$_enc_dec_done_335

$L$_partial_incomplete_335:
        mov     r12,QWORD[112+rbp]
        add     QWORD[r8],r12
        mov     r11,QWORD[112+rbp]

$L$_enc_dec_done_335:


        lea     r12,[byte_len_to_mask_table]
        kmovw   k1,[r11*2+r12]
        vmovdqu64       XMMWORD[64+rdx],xmm14

        vpshufb xmm3,xmm3,XMMWORD[SHUF_MASK]
        vpshufb xmm3,xmm3,xmm5
        mov     r12,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r12]{k1},xmm3
$L$_partial_block_done_335:
        vmovdqu64       xmm2,XMMWORD[rdx]
        mov     r13,QWORD[112+rbp]
        sub     r13,r11
        je      NEAR $L$_enc_dec_done_334
        cmp     r13,256
        jbe     NEAR $L$_message_below_equal_16_blocks_334

        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vmovdqa64       zmm27,ZMMWORD[ddq_addbe_4444]
        vmovdqa64       zmm28,ZMMWORD[ddq_addbe_1234]






        vmovd   r15d,xmm2
        and     r15d,255

        vshufi64x2      zmm2,zmm2,zmm2,0
        vpshufb zmm2,zmm2,zmm29



        cmp     r15b,240
        jae     NEAR $L$_next_16_overflow_336
        vpaddd  zmm7,zmm2,zmm28
        vpaddd  zmm10,zmm7,zmm27
        vpaddd  zmm11,zmm10,zmm27
        vpaddd  zmm12,zmm11,zmm27
        jmp     NEAR $L$_next_16_ok_336
$L$_next_16_overflow_336:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm12,ZMMWORD[ddq_add_4444]
        vpaddd  zmm7,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm10,zmm7,zmm12
        vpaddd  zmm11,zmm10,zmm12
        vpaddd  zmm12,zmm11,zmm12
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vpshufb zmm12,zmm12,zmm29
$L$_next_16_ok_336:
        vshufi64x2      zmm2,zmm12,zmm12,255
        add     r15b,16

        vmovdqu8        zmm0,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm3,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm4,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm5,ZMMWORD[192+r11*1+r9]


        vbroadcastf64x2 zmm6,ZMMWORD[rcx]
        vpxorq  zmm7,zmm7,zmm6
        vpxorq  zmm10,zmm10,zmm6
        vpxorq  zmm11,zmm11,zmm6
        vpxorq  zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[16+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[32+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[48+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[64+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[80+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[96+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[112+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[128+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[144+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[160+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[176+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[192+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[208+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[224+rcx]
        vaesenclast     zmm7,zmm7,zmm6
        vaesenclast     zmm10,zmm10,zmm6
        vaesenclast     zmm11,zmm11,zmm6
        vaesenclast     zmm12,zmm12,zmm6


        vpxorq  zmm7,zmm7,zmm0
        vpxorq  zmm10,zmm10,zmm3
        vpxorq  zmm11,zmm11,zmm4
        vpxorq  zmm12,zmm12,zmm5


        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm7
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm10
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm11
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm12

        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vpshufb zmm12,zmm12,zmm29
        vmovdqa64       ZMMWORD[768+rsp],zmm7
        vmovdqa64       ZMMWORD[832+rsp],zmm10
        vmovdqa64       ZMMWORD[896+rsp],zmm11
        vmovdqa64       ZMMWORD[960+rsp],zmm12
        test    r14,r14
        jnz     NEAR $L$_skip_hkeys_precomputation_337

        vmovdqu64       zmm0,ZMMWORD[288+rdx]
        vmovdqu64       ZMMWORD[704+rsp],zmm0

        vmovdqu64       zmm3,ZMMWORD[224+rdx]
        vmovdqu64       ZMMWORD[640+rsp],zmm3


        vshufi64x2      zmm3,zmm3,zmm3,0x00

        vmovdqu64       zmm4,ZMMWORD[160+rdx]
        vmovdqu64       ZMMWORD[576+rsp],zmm4

        vmovdqu64       zmm5,ZMMWORD[96+rdx]
        vmovdqu64       ZMMWORD[512+rsp],zmm5
$L$_skip_hkeys_precomputation_337:
        cmp     r13,512
        jb      NEAR $L$_message_below_32_blocks_334



        cmp     r15b,240
        jae     NEAR $L$_next_16_overflow_338
        vpaddd  zmm7,zmm2,zmm28
        vpaddd  zmm10,zmm7,zmm27
        vpaddd  zmm11,zmm10,zmm27
        vpaddd  zmm12,zmm11,zmm27
        jmp     NEAR $L$_next_16_ok_338
$L$_next_16_overflow_338:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm12,ZMMWORD[ddq_add_4444]
        vpaddd  zmm7,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm10,zmm7,zmm12
        vpaddd  zmm11,zmm10,zmm12
        vpaddd  zmm12,zmm11,zmm12
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vpshufb zmm12,zmm12,zmm29
$L$_next_16_ok_338:
        vshufi64x2      zmm2,zmm12,zmm12,255
        add     r15b,16

        vmovdqu8        zmm0,ZMMWORD[256+r11*1+r9]
        vmovdqu8        zmm3,ZMMWORD[320+r11*1+r9]
        vmovdqu8        zmm4,ZMMWORD[384+r11*1+r9]
        vmovdqu8        zmm5,ZMMWORD[448+r11*1+r9]


        vbroadcastf64x2 zmm6,ZMMWORD[rcx]
        vpxorq  zmm7,zmm7,zmm6
        vpxorq  zmm10,zmm10,zmm6
        vpxorq  zmm11,zmm11,zmm6
        vpxorq  zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[16+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[32+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[48+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[64+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[80+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[96+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[112+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[128+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[144+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[160+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[176+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[192+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[208+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[224+rcx]
        vaesenclast     zmm7,zmm7,zmm6
        vaesenclast     zmm10,zmm10,zmm6
        vaesenclast     zmm11,zmm11,zmm6
        vaesenclast     zmm12,zmm12,zmm6


        vpxorq  zmm7,zmm7,zmm0
        vpxorq  zmm10,zmm10,zmm3
        vpxorq  zmm11,zmm11,zmm4
        vpxorq  zmm12,zmm12,zmm5


        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[256+r11*1+r10],zmm7
        vmovdqu8        ZMMWORD[320+r11*1+r10],zmm10
        vmovdqu8        ZMMWORD[384+r11*1+r10],zmm11
        vmovdqu8        ZMMWORD[448+r11*1+r10],zmm12

        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vpshufb zmm12,zmm12,zmm29
        vmovdqa64       ZMMWORD[1024+rsp],zmm7
        vmovdqa64       ZMMWORD[1088+rsp],zmm10
        vmovdqa64       ZMMWORD[1152+rsp],zmm11
        vmovdqa64       ZMMWORD[1216+rsp],zmm12
        test    r14,r14
        jnz     NEAR $L$_skip_hkeys_precomputation_339
        vmovdqu64       zmm3,ZMMWORD[640+rsp]


        vshufi64x2      zmm3,zmm3,zmm3,0x00

        vmovdqu64       zmm4,ZMMWORD[576+rsp]
        vmovdqu64       zmm5,ZMMWORD[512+rsp]

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[448+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[384+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[320+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[256+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[192+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[128+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[64+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[rsp],zmm5
$L$_skip_hkeys_precomputation_339:
        mov     r14,1
        add     r11,512
        sub     r13,512

        cmp     r13,768
        jb      NEAR $L$_no_more_big_nblocks_334
$L$_encrypt_big_nblocks_334:
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_340
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_340
$L$_16_blocks_overflow_340:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_340:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[192+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm26,zmm10,zmm15
        vpxorq  zmm24,zmm6,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]

        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqa64       ZMMWORD[1280+rsp],zmm0
        vmovdqa64       ZMMWORD[1344+rsp],zmm3
        vmovdqa64       ZMMWORD[1408+rsp],zmm4
        vmovdqa64       ZMMWORD[1472+rsp],zmm5
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_341
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_341
$L$_16_blocks_overflow_341:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_341:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[256+rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[320+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[384+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[448+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[256+r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[320+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[384+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[448+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vpternlogq      zmm24,zmm6,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]

        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[256+r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[320+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[384+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[448+r11*1+r10],zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqa64       ZMMWORD[768+rsp],zmm0
        vmovdqa64       ZMMWORD[832+rsp],zmm3
        vmovdqa64       ZMMWORD[896+rsp],zmm4
        vmovdqa64       ZMMWORD[960+rsp],zmm5
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_342
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_342
$L$_16_blocks_overflow_342:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_342:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[512+r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[576+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[640+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[704+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]


        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96

        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpternlogq      zmm6,zmm12,zmm15,0x96
        vpxorq  zmm6,zmm6,zmm24
        vpternlogq      zmm7,zmm13,zmm10,0x96
        vpxorq  zmm7,zmm7,zmm25
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vextracti64x4   ymm12,zmm6,1
        vpxorq  ymm6,ymm6,ymm12
        vextracti32x4   xmm12,ymm6,1
        vpxorq  xmm6,xmm6,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]

        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm6,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[512+r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[576+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[640+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[704+r11*1+r10],zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqa64       ZMMWORD[1024+rsp],zmm0
        vmovdqa64       ZMMWORD[1088+rsp],zmm3
        vmovdqa64       ZMMWORD[1152+rsp],zmm4
        vmovdqa64       ZMMWORD[1216+rsp],zmm5
        vmovdqa64       zmm14,zmm6

        add     r11,768
        sub     r13,768
        cmp     r13,768
        jae     NEAR $L$_encrypt_big_nblocks_334

$L$_no_more_big_nblocks_334:

        cmp     r13,512
        jae     NEAR $L$_encrypt_32_blocks_334

        cmp     r13,256
        jae     NEAR $L$_encrypt_16_blocks_334
$L$_encrypt_0_blocks_ghash_32_334:
        mov     r10d,r13d
        and     r10d,~15
        mov     ebx,256
        sub     ebx,r10d
        vmovdqa64       zmm13,ZMMWORD[768+rsp]
        vpxorq  zmm13,zmm13,zmm14
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[832+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpxorq  zmm26,zmm4,zmm10
        vpxorq  zmm24,zmm0,zmm6
        vpxorq  zmm25,zmm3,zmm7
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[896+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[960+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        add     ebx,256
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_343

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_343
        jb      NEAR $L$_last_num_blocks_is_7_1_343


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_343
        jb      NEAR $L$_last_num_blocks_is_11_9_343


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_343
        ja      NEAR $L$_last_num_blocks_is_16_343
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_343
        jmp     NEAR $L$_last_num_blocks_is_13_343

$L$_last_num_blocks_is_11_9_343:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_343
        ja      NEAR $L$_last_num_blocks_is_11_343
        jmp     NEAR $L$_last_num_blocks_is_9_343

$L$_last_num_blocks_is_7_1_343:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_343
        jb      NEAR $L$_last_num_blocks_is_3_1_343

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_343
        je      NEAR $L$_last_num_blocks_is_6_343
        jmp     NEAR $L$_last_num_blocks_is_5_343

$L$_last_num_blocks_is_3_1_343:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_343
        je      NEAR $L$_last_num_blocks_is_2_343
$L$_last_num_blocks_is_1_343:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_344
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_344

$L$_16_blocks_overflow_344:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_344:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc xmm0,xmm0,xmm31
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb xmm17,xmm0,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_345





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_345
$L$_small_initial_partial_block_345:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11


        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm0,XMMWORD[POLY2]


        vpclmulqdq      xmm3,xmm0,xmm25,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm3,xmm25,xmm3


        vpclmulqdq      xmm4,xmm0,xmm3,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm14,xmm0,xmm3,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm4,xmm24,0x96












        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_345
$L$_small_initial_compute_done_345:
$L$_after_reduction_345:
        jmp     NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_2_343:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_346
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_346

$L$_16_blocks_overflow_346:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_346:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc ymm0,ymm0,ymm31
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb ymm17,ymm0,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_347





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_347
$L$_small_initial_partial_block_347:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_347:

        or      r13,r13
        je      NEAR $L$_after_reduction_347
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_347:
        jmp     NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_3_343:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_348
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_348

$L$_16_blocks_overflow_348:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_348:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_349





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_349
$L$_small_initial_partial_block_349:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_349:

        or      r13,r13
        je      NEAR $L$_after_reduction_349
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_349:
        jmp     NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_4_343:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_350
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_350

$L$_16_blocks_overflow_350:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_350:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_351





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_351
$L$_small_initial_partial_block_351:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_351:

        or      r13,r13
        je      NEAR $L$_after_reduction_351
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_351:
        jmp     NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_5_343:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_352
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_352

$L$_16_blocks_overflow_352:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_352:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb xmm19,xmm3,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_353





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_353
$L$_small_initial_partial_block_353:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_353:

        or      r13,r13
        je      NEAR $L$_after_reduction_353
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_353:
        jmp     NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_6_343:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_354
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_354

$L$_16_blocks_overflow_354:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_354:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb ymm19,ymm3,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_355





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_355
$L$_small_initial_partial_block_355:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_355:

        or      r13,r13
        je      NEAR $L$_after_reduction_355
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_355:
        jmp     NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_7_343:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_356
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_356

$L$_16_blocks_overflow_356:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_356:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_357





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_357
$L$_small_initial_partial_block_357:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_357:

        or      r13,r13
        je      NEAR $L$_after_reduction_357
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_357:
        jmp     NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_8_343:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_358
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_358

$L$_16_blocks_overflow_358:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_358:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_359





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_359
$L$_small_initial_partial_block_359:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_359:

        or      r13,r13
        je      NEAR $L$_after_reduction_359
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_359:
        jmp     NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_9_343:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_360
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_360

$L$_16_blocks_overflow_360:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_360:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb xmm20,xmm4,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_361





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_361
$L$_small_initial_partial_block_361:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_361:

        or      r13,r13
        je      NEAR $L$_after_reduction_361
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_361:
        jmp     NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_10_343:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_362
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_362

$L$_16_blocks_overflow_362:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_362:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb ymm20,ymm4,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_363





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_363
$L$_small_initial_partial_block_363:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_363:

        or      r13,r13
        je      NEAR $L$_after_reduction_363
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_363:
        jmp     NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_11_343:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_364
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_364

$L$_16_blocks_overflow_364:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_364:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_365





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_365
$L$_small_initial_partial_block_365:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_365:

        or      r13,r13
        je      NEAR $L$_after_reduction_365
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_365:
        jmp     NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_12_343:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_366
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_366

$L$_16_blocks_overflow_366:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_366:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_367





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_367
$L$_small_initial_partial_block_367:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_367:

        or      r13,r13
        je      NEAR $L$_after_reduction_367
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_367:
        jmp     NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_13_343:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_368
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_368

$L$_16_blocks_overflow_368:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_368:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb xmm21,xmm5,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_369





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_369
$L$_small_initial_partial_block_369:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_369:

        or      r13,r13
        je      NEAR $L$_after_reduction_369
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_369:
        jmp     NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_14_343:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_370
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_370

$L$_16_blocks_overflow_370:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_370:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb ymm21,ymm5,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_371





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_371
$L$_small_initial_partial_block_371:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_371:

        or      r13,r13
        je      NEAR $L$_after_reduction_371
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_371:
        jmp     NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_15_343:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_372
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_372

$L$_16_blocks_overflow_372:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_372:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_373





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_373
$L$_small_initial_partial_block_373:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_373:

        or      r13,r13
        je      NEAR $L$_after_reduction_373
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_373:
        jmp     NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_16_343:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_374
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_374

$L$_16_blocks_overflow_374:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_374:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_375:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_375:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_375:
        jmp     NEAR $L$_last_blocks_done_343
$L$_last_num_blocks_is_0_343:
        vmovdqa64       zmm13,ZMMWORD[1024+rsp]
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1088+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1152+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1216+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_343:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_334
$L$_encrypt_32_blocks_334:
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_376
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_376
$L$_16_blocks_overflow_376:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_376:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[192+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm26,zmm10,zmm15
        vpxorq  zmm24,zmm6,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]

        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqa64       ZMMWORD[1280+rsp],zmm0
        vmovdqa64       ZMMWORD[1344+rsp],zmm3
        vmovdqa64       ZMMWORD[1408+rsp],zmm4
        vmovdqa64       ZMMWORD[1472+rsp],zmm5
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_377
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_377
$L$_16_blocks_overflow_377:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_377:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[256+rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[320+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[384+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[448+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[256+r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[320+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[384+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[448+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vpternlogq      zmm24,zmm6,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]

        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[256+r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[320+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[384+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[448+r11*1+r10],zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqa64       ZMMWORD[768+rsp],zmm0
        vmovdqa64       ZMMWORD[832+rsp],zmm3
        vmovdqa64       ZMMWORD[896+rsp],zmm4
        vmovdqa64       ZMMWORD[960+rsp],zmm5
        vmovdqa64       zmm13,ZMMWORD[1280+rsp]
        vmovdqu64       zmm12,ZMMWORD[512+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1344+rsp]
        vmovdqu64       zmm12,ZMMWORD[576+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1408+rsp]
        vmovdqu64       zmm12,ZMMWORD[640+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1472+rsp]
        vmovdqu64       zmm12,ZMMWORD[704+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

        sub     r13,512
        add     r11,512
        mov     r10d,r13d
        and     r10d,~15
        mov     ebx,512
        sub     ebx,r10d
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_378

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_378
        jb      NEAR $L$_last_num_blocks_is_7_1_378


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_378
        jb      NEAR $L$_last_num_blocks_is_11_9_378


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_378
        ja      NEAR $L$_last_num_blocks_is_16_378
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_378
        jmp     NEAR $L$_last_num_blocks_is_13_378

$L$_last_num_blocks_is_11_9_378:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_378
        ja      NEAR $L$_last_num_blocks_is_11_378
        jmp     NEAR $L$_last_num_blocks_is_9_378

$L$_last_num_blocks_is_7_1_378:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_378
        jb      NEAR $L$_last_num_blocks_is_3_1_378

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_378
        je      NEAR $L$_last_num_blocks_is_6_378
        jmp     NEAR $L$_last_num_blocks_is_5_378

$L$_last_num_blocks_is_3_1_378:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_378
        je      NEAR $L$_last_num_blocks_is_2_378
$L$_last_num_blocks_is_1_378:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_379
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_379

$L$_16_blocks_overflow_379:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_379:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc xmm0,xmm0,xmm31
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb xmm17,xmm0,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_380





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_380
$L$_small_initial_partial_block_380:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11


        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm0,XMMWORD[POLY2]


        vpclmulqdq      xmm3,xmm0,xmm25,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm3,xmm25,xmm3


        vpclmulqdq      xmm4,xmm0,xmm3,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm14,xmm0,xmm3,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm4,xmm24,0x96












        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_380
$L$_small_initial_compute_done_380:
$L$_after_reduction_380:
        jmp     NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_2_378:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_381
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_381

$L$_16_blocks_overflow_381:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_381:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc ymm0,ymm0,ymm31
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb ymm17,ymm0,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_382





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_382
$L$_small_initial_partial_block_382:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_382:

        or      r13,r13
        je      NEAR $L$_after_reduction_382
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_382:
        jmp     NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_3_378:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_383
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_383

$L$_16_blocks_overflow_383:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_383:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_384





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_384
$L$_small_initial_partial_block_384:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_384:

        or      r13,r13
        je      NEAR $L$_after_reduction_384
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_384:
        jmp     NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_4_378:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_385
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_385

$L$_16_blocks_overflow_385:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_385:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_386





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_386
$L$_small_initial_partial_block_386:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_386:

        or      r13,r13
        je      NEAR $L$_after_reduction_386
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_386:
        jmp     NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_5_378:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_387
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_387

$L$_16_blocks_overflow_387:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_387:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb xmm19,xmm3,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_388





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_388
$L$_small_initial_partial_block_388:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_388:

        or      r13,r13
        je      NEAR $L$_after_reduction_388
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_388:
        jmp     NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_6_378:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_389
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_389

$L$_16_blocks_overflow_389:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_389:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb ymm19,ymm3,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_390





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_390
$L$_small_initial_partial_block_390:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_390:

        or      r13,r13
        je      NEAR $L$_after_reduction_390
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_390:
        jmp     NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_7_378:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_391
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_391

$L$_16_blocks_overflow_391:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_391:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_392





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_392
$L$_small_initial_partial_block_392:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_392:

        or      r13,r13
        je      NEAR $L$_after_reduction_392
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_392:
        jmp     NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_8_378:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_393
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_393

$L$_16_blocks_overflow_393:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_393:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_394





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_394
$L$_small_initial_partial_block_394:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_394:

        or      r13,r13
        je      NEAR $L$_after_reduction_394
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_394:
        jmp     NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_9_378:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_395
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_395

$L$_16_blocks_overflow_395:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_395:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb xmm20,xmm4,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_396





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_396
$L$_small_initial_partial_block_396:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_396:

        or      r13,r13
        je      NEAR $L$_after_reduction_396
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_396:
        jmp     NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_10_378:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_397
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_397

$L$_16_blocks_overflow_397:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_397:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb ymm20,ymm4,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_398





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_398
$L$_small_initial_partial_block_398:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_398:

        or      r13,r13
        je      NEAR $L$_after_reduction_398
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_398:
        jmp     NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_11_378:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_399
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_399

$L$_16_blocks_overflow_399:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_399:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_400





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_400
$L$_small_initial_partial_block_400:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_400:

        or      r13,r13
        je      NEAR $L$_after_reduction_400
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_400:
        jmp     NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_12_378:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_401
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_401

$L$_16_blocks_overflow_401:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_401:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_402





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_402
$L$_small_initial_partial_block_402:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_402:

        or      r13,r13
        je      NEAR $L$_after_reduction_402
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_402:
        jmp     NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_13_378:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_403
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_403

$L$_16_blocks_overflow_403:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_403:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb xmm21,xmm5,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_404





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_404
$L$_small_initial_partial_block_404:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_404:

        or      r13,r13
        je      NEAR $L$_after_reduction_404
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_404:
        jmp     NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_14_378:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_405
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_405

$L$_16_blocks_overflow_405:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_405:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb ymm21,ymm5,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_406





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_406
$L$_small_initial_partial_block_406:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_406:

        or      r13,r13
        je      NEAR $L$_after_reduction_406
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_406:
        jmp     NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_15_378:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_407
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_407

$L$_16_blocks_overflow_407:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_407:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_408





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_408
$L$_small_initial_partial_block_408:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_408:

        or      r13,r13
        je      NEAR $L$_after_reduction_408
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_408:
        jmp     NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_16_378:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_409
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_409

$L$_16_blocks_overflow_409:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_409:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_410:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_410:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_410:
        jmp     NEAR $L$_last_blocks_done_378
$L$_last_num_blocks_is_0_378:
        vmovdqa64       zmm13,ZMMWORD[768+rsp]
        vpxorq  zmm13,zmm13,zmm14
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[832+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpxorq  zmm26,zmm4,zmm10
        vpxorq  zmm24,zmm0,zmm6
        vpxorq  zmm25,zmm3,zmm7
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[896+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[960+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_378:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_334
$L$_encrypt_16_blocks_334:
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_411
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_411
$L$_16_blocks_overflow_411:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_411:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[192+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm26,zmm10,zmm15
        vpxorq  zmm24,zmm6,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]

        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqa64       ZMMWORD[1280+rsp],zmm0
        vmovdqa64       ZMMWORD[1344+rsp],zmm3
        vmovdqa64       ZMMWORD[1408+rsp],zmm4
        vmovdqa64       ZMMWORD[1472+rsp],zmm5
        vmovdqa64       zmm13,ZMMWORD[1024+rsp]
        vmovdqu64       zmm12,ZMMWORD[256+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1088+rsp]
        vmovdqu64       zmm12,ZMMWORD[320+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1152+rsp]
        vmovdqu64       zmm12,ZMMWORD[384+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1216+rsp]
        vmovdqu64       zmm12,ZMMWORD[448+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        sub     r13,256
        add     r11,256
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_412

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_412
        jb      NEAR $L$_last_num_blocks_is_7_1_412


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_412
        jb      NEAR $L$_last_num_blocks_is_11_9_412


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_412
        ja      NEAR $L$_last_num_blocks_is_16_412
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_412
        jmp     NEAR $L$_last_num_blocks_is_13_412

$L$_last_num_blocks_is_11_9_412:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_412
        ja      NEAR $L$_last_num_blocks_is_11_412
        jmp     NEAR $L$_last_num_blocks_is_9_412

$L$_last_num_blocks_is_7_1_412:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_412
        jb      NEAR $L$_last_num_blocks_is_3_1_412

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_412
        je      NEAR $L$_last_num_blocks_is_6_412
        jmp     NEAR $L$_last_num_blocks_is_5_412

$L$_last_num_blocks_is_3_1_412:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_412
        je      NEAR $L$_last_num_blocks_is_2_412
$L$_last_num_blocks_is_1_412:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_413
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_413

$L$_16_blocks_overflow_413:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_413:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc xmm0,xmm0,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc xmm0,xmm0,xmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb xmm17,xmm0,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_414





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_414
$L$_small_initial_partial_block_414:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11











        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_414
$L$_small_initial_compute_done_414:
$L$_after_reduction_414:
        jmp     NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_2_412:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_415
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_415

$L$_16_blocks_overflow_415:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_415:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc ymm0,ymm0,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc ymm0,ymm0,ymm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb ymm17,ymm0,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_416





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_416
$L$_small_initial_partial_block_416:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_416:

        or      r13,r13
        je      NEAR $L$_after_reduction_416
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_416:
        jmp     NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_3_412:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_417
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_417

$L$_16_blocks_overflow_417:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_417:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_418





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_418
$L$_small_initial_partial_block_418:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_418:

        or      r13,r13
        je      NEAR $L$_after_reduction_418
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_418:
        jmp     NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_4_412:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_419
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_419

$L$_16_blocks_overflow_419:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_419:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_420





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_420
$L$_small_initial_partial_block_420:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_420:

        or      r13,r13
        je      NEAR $L$_after_reduction_420
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_420:
        jmp     NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_5_412:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_421
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_421

$L$_16_blocks_overflow_421:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_421:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb xmm19,xmm3,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_422





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_422
$L$_small_initial_partial_block_422:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_422:

        or      r13,r13
        je      NEAR $L$_after_reduction_422
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_422:
        jmp     NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_6_412:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_423
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_423

$L$_16_blocks_overflow_423:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_423:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb ymm19,ymm3,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_424





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_424
$L$_small_initial_partial_block_424:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_424:

        or      r13,r13
        je      NEAR $L$_after_reduction_424
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_424:
        jmp     NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_7_412:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_425
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_425

$L$_16_blocks_overflow_425:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_425:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_426





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_426
$L$_small_initial_partial_block_426:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_426:

        or      r13,r13
        je      NEAR $L$_after_reduction_426
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_426:
        jmp     NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_8_412:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_427
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_427

$L$_16_blocks_overflow_427:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_427:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_428





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_428
$L$_small_initial_partial_block_428:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_428:

        or      r13,r13
        je      NEAR $L$_after_reduction_428
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_428:
        jmp     NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_9_412:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_429
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_429

$L$_16_blocks_overflow_429:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_429:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb xmm20,xmm4,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_430





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_430
$L$_small_initial_partial_block_430:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_430:

        or      r13,r13
        je      NEAR $L$_after_reduction_430
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_430:
        jmp     NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_10_412:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_431
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_431

$L$_16_blocks_overflow_431:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_431:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb ymm20,ymm4,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_432





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_432
$L$_small_initial_partial_block_432:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_432:

        or      r13,r13
        je      NEAR $L$_after_reduction_432
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_432:
        jmp     NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_11_412:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_433
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_433

$L$_16_blocks_overflow_433:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_433:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_434





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_434
$L$_small_initial_partial_block_434:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_434:

        or      r13,r13
        je      NEAR $L$_after_reduction_434
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_434:
        jmp     NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_12_412:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_435
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_435

$L$_16_blocks_overflow_435:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_435:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_436





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_436
$L$_small_initial_partial_block_436:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_436:

        or      r13,r13
        je      NEAR $L$_after_reduction_436
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_436:
        jmp     NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_13_412:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_437
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_437

$L$_16_blocks_overflow_437:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_437:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb xmm21,xmm5,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_438





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_438
$L$_small_initial_partial_block_438:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_438:

        or      r13,r13
        je      NEAR $L$_after_reduction_438
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_438:
        jmp     NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_14_412:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_439
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_439

$L$_16_blocks_overflow_439:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_439:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb ymm21,ymm5,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_440





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_440
$L$_small_initial_partial_block_440:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_440:

        or      r13,r13
        je      NEAR $L$_after_reduction_440
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_440:
        jmp     NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_15_412:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_441
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_441

$L$_16_blocks_overflow_441:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_441:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_442





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_442
$L$_small_initial_partial_block_442:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_442:

        or      r13,r13
        je      NEAR $L$_after_reduction_442
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_442:
        jmp     NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_16_412:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_443
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_443

$L$_16_blocks_overflow_443:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_443:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_444:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_444:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_444:
        jmp     NEAR $L$_last_blocks_done_412
$L$_last_num_blocks_is_0_412:
        vmovdqa64       zmm13,ZMMWORD[1280+rsp]
        vmovdqu64       zmm12,ZMMWORD[512+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1344+rsp]
        vmovdqu64       zmm12,ZMMWORD[576+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1408+rsp]
        vmovdqu64       zmm12,ZMMWORD[640+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1472+rsp]
        vmovdqu64       zmm12,ZMMWORD[704+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_412:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_334

$L$_message_below_32_blocks_334:


        sub     r13,256
        add     r11,256
        mov     r10d,r13d
        test    r14,r14
        jnz     NEAR $L$_skip_hkeys_precomputation_445
        vmovdqu64       zmm3,ZMMWORD[640+rsp]


        vshufi64x2      zmm3,zmm3,zmm3,0x00

        vmovdqu64       zmm4,ZMMWORD[576+rsp]
        vmovdqu64       zmm5,ZMMWORD[512+rsp]

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[448+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[384+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[320+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[256+rsp],zmm5
$L$_skip_hkeys_precomputation_445:
        mov     r14,1
        and     r10d,~15
        mov     ebx,512
        sub     ebx,r10d
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_446

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_446
        jb      NEAR $L$_last_num_blocks_is_7_1_446


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_446
        jb      NEAR $L$_last_num_blocks_is_11_9_446


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_446
        ja      NEAR $L$_last_num_blocks_is_16_446
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_446
        jmp     NEAR $L$_last_num_blocks_is_13_446

$L$_last_num_blocks_is_11_9_446:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_446
        ja      NEAR $L$_last_num_blocks_is_11_446
        jmp     NEAR $L$_last_num_blocks_is_9_446

$L$_last_num_blocks_is_7_1_446:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_446
        jb      NEAR $L$_last_num_blocks_is_3_1_446

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_446
        je      NEAR $L$_last_num_blocks_is_6_446
        jmp     NEAR $L$_last_num_blocks_is_5_446

$L$_last_num_blocks_is_3_1_446:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_446
        je      NEAR $L$_last_num_blocks_is_2_446
$L$_last_num_blocks_is_1_446:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_447
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_447

$L$_16_blocks_overflow_447:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_447:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc xmm0,xmm0,xmm31
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb xmm17,xmm0,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_448





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_448
$L$_small_initial_partial_block_448:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11


        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm0,XMMWORD[POLY2]


        vpclmulqdq      xmm3,xmm0,xmm25,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm3,xmm25,xmm3


        vpclmulqdq      xmm4,xmm0,xmm3,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm14,xmm0,xmm3,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm4,xmm24,0x96












        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_448
$L$_small_initial_compute_done_448:
$L$_after_reduction_448:
        jmp     NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_2_446:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_449
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_449

$L$_16_blocks_overflow_449:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_449:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc ymm0,ymm0,ymm31
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb ymm17,ymm0,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_450





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_450
$L$_small_initial_partial_block_450:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_450:

        or      r13,r13
        je      NEAR $L$_after_reduction_450
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_450:
        jmp     NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_3_446:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_451
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_451

$L$_16_blocks_overflow_451:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_451:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_452





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_452
$L$_small_initial_partial_block_452:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_452:

        or      r13,r13
        je      NEAR $L$_after_reduction_452
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_452:
        jmp     NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_4_446:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_453
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_453

$L$_16_blocks_overflow_453:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_453:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm17,zmm0,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_454





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_454
$L$_small_initial_partial_block_454:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_454:

        or      r13,r13
        je      NEAR $L$_after_reduction_454
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_454:
        jmp     NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_5_446:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_455
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_455

$L$_16_blocks_overflow_455:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_455:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb xmm19,xmm3,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_456





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_456
$L$_small_initial_partial_block_456:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_456:

        or      r13,r13
        je      NEAR $L$_after_reduction_456
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_456:
        jmp     NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_6_446:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_457
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_457

$L$_16_blocks_overflow_457:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_457:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb ymm19,ymm3,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_458





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_458
$L$_small_initial_partial_block_458:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_458:

        or      r13,r13
        je      NEAR $L$_after_reduction_458
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_458:
        jmp     NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_7_446:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_459
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_459

$L$_16_blocks_overflow_459:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_459:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_460





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_460
$L$_small_initial_partial_block_460:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_460:

        or      r13,r13
        je      NEAR $L$_after_reduction_460
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_460:
        jmp     NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_8_446:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_461
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_461

$L$_16_blocks_overflow_461:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_461:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_462





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_462
$L$_small_initial_partial_block_462:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_462:

        or      r13,r13
        je      NEAR $L$_after_reduction_462
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_462:
        jmp     NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_9_446:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_463
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_463

$L$_16_blocks_overflow_463:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_463:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb xmm20,xmm4,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_464





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_464
$L$_small_initial_partial_block_464:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_464:

        or      r13,r13
        je      NEAR $L$_after_reduction_464
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_464:
        jmp     NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_10_446:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_465
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_465

$L$_16_blocks_overflow_465:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_465:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb ymm20,ymm4,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_466





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_466
$L$_small_initial_partial_block_466:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_466:

        or      r13,r13
        je      NEAR $L$_after_reduction_466
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_466:
        jmp     NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_11_446:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_467
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_467

$L$_16_blocks_overflow_467:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_467:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_468





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_468
$L$_small_initial_partial_block_468:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_468:

        or      r13,r13
        je      NEAR $L$_after_reduction_468
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_468:
        jmp     NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_12_446:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_469
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_469

$L$_16_blocks_overflow_469:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_469:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_470





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_470
$L$_small_initial_partial_block_470:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_470:

        or      r13,r13
        je      NEAR $L$_after_reduction_470
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_470:
        jmp     NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_13_446:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_471
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_471

$L$_16_blocks_overflow_471:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_471:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb xmm21,xmm5,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_472





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_472
$L$_small_initial_partial_block_472:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_472:

        or      r13,r13
        je      NEAR $L$_after_reduction_472
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_472:
        jmp     NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_14_446:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_473
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_473

$L$_16_blocks_overflow_473:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_473:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb ymm21,ymm5,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_474





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_474
$L$_small_initial_partial_block_474:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_474:

        or      r13,r13
        je      NEAR $L$_after_reduction_474
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_474:
        jmp     NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_15_446:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_475
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_475

$L$_16_blocks_overflow_475:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_475:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_476





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_476
$L$_small_initial_partial_block_476:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_476:

        or      r13,r13
        je      NEAR $L$_after_reduction_476
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_476:
        jmp     NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_16_446:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_477
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_477

$L$_16_blocks_overflow_477:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_477:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm17,zmm0,zmm29
        vpshufb zmm19,zmm3,zmm29
        vpshufb zmm20,zmm4,zmm29
        vpshufb zmm21,zmm5,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_478:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_478:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_478:
        jmp     NEAR $L$_last_blocks_done_446
$L$_last_num_blocks_is_0_446:
        vmovdqa64       zmm13,ZMMWORD[768+rsp]
        vpxorq  zmm13,zmm13,zmm14
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[832+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpxorq  zmm26,zmm4,zmm10
        vpxorq  zmm24,zmm0,zmm6
        vpxorq  zmm25,zmm3,zmm7
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[896+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[960+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_446:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_334

$L$_message_below_equal_16_blocks_334:


        mov     r12d,r13d
        add     r12d,15
        shr     r12d,4
        cmp     r12,8
        je      NEAR $L$_small_initial_num_blocks_is_8_479
        jl      NEAR $L$_small_initial_num_blocks_is_7_1_479


        cmp     r12,12
        je      NEAR $L$_small_initial_num_blocks_is_12_479
        jl      NEAR $L$_small_initial_num_blocks_is_11_9_479


        cmp     r12,16
        je      NEAR $L$_small_initial_num_blocks_is_16_479
        cmp     r12,15
        je      NEAR $L$_small_initial_num_blocks_is_15_479
        cmp     r12,14
        je      NEAR $L$_small_initial_num_blocks_is_14_479
        jmp     NEAR $L$_small_initial_num_blocks_is_13_479

$L$_small_initial_num_blocks_is_11_9_479:

        cmp     r12,11
        je      NEAR $L$_small_initial_num_blocks_is_11_479
        cmp     r12,10
        je      NEAR $L$_small_initial_num_blocks_is_10_479
        jmp     NEAR $L$_small_initial_num_blocks_is_9_479

$L$_small_initial_num_blocks_is_7_1_479:
        cmp     r12,4
        je      NEAR $L$_small_initial_num_blocks_is_4_479
        jl      NEAR $L$_small_initial_num_blocks_is_3_1_479

        cmp     r12,7
        je      NEAR $L$_small_initial_num_blocks_is_7_479
        cmp     r12,6
        je      NEAR $L$_small_initial_num_blocks_is_6_479
        jmp     NEAR $L$_small_initial_num_blocks_is_5_479

$L$_small_initial_num_blocks_is_3_1_479:

        cmp     r12,3
        je      NEAR $L$_small_initial_num_blocks_is_3_479
        cmp     r12,2
        je      NEAR $L$_small_initial_num_blocks_is_2_479





$L$_small_initial_num_blocks_is_1_479:
        vmovdqa64       xmm29,XMMWORD[SHUF_MASK]
        vpaddd  xmm0,xmm2,XMMWORD[ONE]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,0
        vpshufb xmm0,xmm0,xmm29
        vmovdqu8        xmm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     xmm0,xmm0,xmm15
        vpxorq  xmm0,xmm0,xmm6
        vextracti32x4   xmm12,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb xmm6,xmm0,xmm29
        vextracti32x4   xmm13,zmm6,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_480





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm6,xmm20,0x01
        vpclmulqdq      xmm5,xmm6,xmm20,0x10
        vpclmulqdq      xmm0,xmm6,xmm20,0x11
        vpclmulqdq      xmm3,xmm6,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_480
$L$_small_initial_partial_block_480:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12











        vpxorq  xmm14,xmm14,xmm13

        jmp     NEAR $L$_after_reduction_480
$L$_small_initial_compute_done_480:
$L$_after_reduction_480:
        jmp     NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_2_479:
        vmovdqa64       ymm29,YMMWORD[SHUF_MASK]
        vshufi64x2      ymm0,ymm2,ymm2,0
        vpaddd  ymm0,ymm0,YMMWORD[ddq_add_1234]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,1
        vpshufb ymm0,ymm0,ymm29
        vmovdqu8        ymm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     ymm0,ymm0,ymm15
        vpxorq  ymm0,ymm0,ymm6
        vextracti32x4   xmm12,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb ymm6,ymm0,ymm29
        vextracti32x4   xmm13,zmm6,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_481





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm6,ymm20,0x01
        vpclmulqdq      ymm5,ymm6,ymm20,0x10
        vpclmulqdq      ymm0,ymm6,ymm20,0x11
        vpclmulqdq      ymm3,ymm6,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_481
$L$_small_initial_partial_block_481:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm6,xmm20,0x01
        vpclmulqdq      xmm5,xmm6,xmm20,0x10
        vpclmulqdq      xmm0,xmm6,xmm20,0x11
        vpclmulqdq      xmm3,xmm6,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_481:

        or      r13,r13
        je      NEAR $L$_after_reduction_481
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_481:
        jmp     NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_3_479:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,2
        vpshufb zmm0,zmm0,zmm29
        vmovdqu8        zmm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vextracti32x4   xmm12,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm6,zmm0,zmm29
        vextracti32x4   xmm13,zmm6,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_482





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_482
$L$_small_initial_partial_block_482:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm6,ymm20,0x01
        vpclmulqdq      ymm5,ymm6,ymm20,0x10
        vpclmulqdq      ymm0,ymm6,ymm20,0x11
        vpclmulqdq      ymm3,ymm6,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_482:

        or      r13,r13
        je      NEAR $L$_after_reduction_482
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_482:
        jmp     NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_4_479:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,3
        vpshufb zmm0,zmm0,zmm29
        vmovdqu8        zmm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vextracti32x4   xmm12,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm6,zmm0,zmm29
        vextracti32x4   xmm13,zmm6,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_483





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_483
$L$_small_initial_partial_block_483:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_483:

        or      r13,r13
        je      NEAR $L$_after_reduction_483
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_483:
        jmp     NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_5_479:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,0
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     xmm3,xmm3,xmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  xmm3,xmm3,xmm7
        vextracti32x4   xmm12,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm0,zmm29
        vpshufb xmm7,xmm3,xmm29
        vextracti32x4   xmm13,zmm7,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_484





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm7,xmm20,0x01
        vpclmulqdq      xmm5,xmm7,xmm20,0x10
        vpclmulqdq      xmm0,xmm7,xmm20,0x11
        vpclmulqdq      xmm3,xmm7,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_484
$L$_small_initial_partial_block_484:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_484:

        or      r13,r13
        je      NEAR $L$_after_reduction_484
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_484:
        jmp     NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_6_479:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,1
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     ymm3,ymm3,ymm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  ymm3,ymm3,ymm7
        vextracti32x4   xmm12,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm0,zmm29
        vpshufb ymm7,ymm3,ymm29
        vextracti32x4   xmm13,zmm7,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_485





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm7,ymm20,0x01
        vpclmulqdq      ymm5,ymm7,ymm20,0x10
        vpclmulqdq      ymm0,ymm7,ymm20,0x11
        vpclmulqdq      ymm3,ymm7,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_485
$L$_small_initial_partial_block_485:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm7,xmm20,0x01
        vpclmulqdq      xmm5,xmm7,xmm20,0x10
        vpclmulqdq      xmm0,xmm7,xmm20,0x11
        vpclmulqdq      xmm3,xmm7,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_485:

        or      r13,r13
        je      NEAR $L$_after_reduction_485
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_485:
        jmp     NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_7_479:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,2
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vextracti32x4   xmm12,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vextracti32x4   xmm13,zmm7,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_486





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm7,zmm20,0x01
        vpclmulqdq      zmm5,zmm7,zmm20,0x10
        vpclmulqdq      zmm0,zmm7,zmm20,0x11
        vpclmulqdq      zmm3,zmm7,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_486
$L$_small_initial_partial_block_486:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm7,ymm20,0x01
        vpclmulqdq      ymm5,ymm7,ymm20,0x10
        vpclmulqdq      ymm0,ymm7,ymm20,0x11
        vpclmulqdq      ymm3,ymm7,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_486:

        or      r13,r13
        je      NEAR $L$_after_reduction_486
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_486:
        jmp     NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_8_479:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,3
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vextracti32x4   xmm12,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vextracti32x4   xmm13,zmm7,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_487





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_487
$L$_small_initial_partial_block_487:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm7,zmm20,0x01
        vpclmulqdq      zmm5,zmm7,zmm20,0x10
        vpclmulqdq      zmm0,zmm7,zmm20,0x11
        vpclmulqdq      zmm3,zmm7,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_487:

        or      r13,r13
        je      NEAR $L$_after_reduction_487
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_487:
        jmp     NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_9_479:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,0
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     xmm4,xmm4,xmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  xmm4,xmm4,xmm10
        vextracti32x4   xmm12,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb xmm10,xmm4,xmm29
        vextracti32x4   xmm13,zmm10,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_488





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm10,xmm20,0x01
        vpclmulqdq      xmm5,xmm10,xmm20,0x10
        vpclmulqdq      xmm0,xmm10,xmm20,0x11
        vpclmulqdq      xmm3,xmm10,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_488
$L$_small_initial_partial_block_488:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_488:

        or      r13,r13
        je      NEAR $L$_after_reduction_488
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_488:
        jmp     NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_10_479:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,1
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     ymm4,ymm4,ymm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  ymm4,ymm4,ymm10
        vextracti32x4   xmm12,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb ymm10,ymm4,ymm29
        vextracti32x4   xmm13,zmm10,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_489





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm10,ymm20,0x01
        vpclmulqdq      ymm5,ymm10,ymm20,0x10
        vpclmulqdq      ymm0,ymm10,ymm20,0x11
        vpclmulqdq      ymm3,ymm10,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_489
$L$_small_initial_partial_block_489:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm10,xmm20,0x01
        vpclmulqdq      xmm5,xmm10,xmm20,0x10
        vpclmulqdq      xmm0,xmm10,xmm20,0x11
        vpclmulqdq      xmm3,xmm10,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_489:

        or      r13,r13
        je      NEAR $L$_after_reduction_489
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_489:
        jmp     NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_11_479:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,2
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vextracti32x4   xmm12,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb zmm10,zmm4,zmm29
        vextracti32x4   xmm13,zmm10,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_490





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm10,zmm20,0x01
        vpclmulqdq      zmm5,zmm10,zmm20,0x10
        vpclmulqdq      zmm0,zmm10,zmm20,0x11
        vpclmulqdq      zmm3,zmm10,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_490
$L$_small_initial_partial_block_490:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm10,ymm20,0x01
        vpclmulqdq      ymm5,ymm10,ymm20,0x10
        vpclmulqdq      ymm0,ymm10,ymm20,0x11
        vpclmulqdq      ymm3,ymm10,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_490:

        or      r13,r13
        je      NEAR $L$_after_reduction_490
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_490:
        jmp     NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_12_479:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,3
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vextracti32x4   xmm12,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb zmm10,zmm4,zmm29
        vextracti32x4   xmm13,zmm10,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_491





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_491
$L$_small_initial_partial_block_491:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm10,zmm20,0x01
        vpclmulqdq      zmm5,zmm10,zmm20,0x10
        vpclmulqdq      zmm0,zmm10,zmm20,0x11
        vpclmulqdq      zmm3,zmm10,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_491:

        or      r13,r13
        je      NEAR $L$_after_reduction_491
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_491:
        jmp     NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_13_479:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,0
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     xmm5,xmm5,xmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  xmm5,xmm5,xmm11
        vextracti32x4   xmm12,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb zmm10,zmm4,zmm29
        vpshufb xmm11,xmm5,xmm29
        vextracti32x4   xmm13,zmm11,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_492





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm11,xmm20,0x01
        vpclmulqdq      xmm5,xmm11,xmm20,0x10
        vpclmulqdq      xmm0,xmm11,xmm20,0x11
        vpclmulqdq      xmm3,xmm11,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_492
$L$_small_initial_partial_block_492:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_492:

        or      r13,r13
        je      NEAR $L$_after_reduction_492
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_492:
        jmp     NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_14_479:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,1
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     ymm5,ymm5,ymm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  ymm5,ymm5,ymm11
        vextracti32x4   xmm12,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb zmm10,zmm4,zmm29
        vpshufb ymm11,ymm5,ymm29
        vextracti32x4   xmm13,zmm11,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_493





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm11,ymm20,0x01
        vpclmulqdq      ymm5,ymm11,ymm20,0x10
        vpclmulqdq      ymm0,ymm11,ymm20,0x11
        vpclmulqdq      ymm3,ymm11,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_493
$L$_small_initial_partial_block_493:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm11,xmm20,0x01
        vpclmulqdq      xmm5,xmm11,xmm20,0x10
        vpclmulqdq      xmm0,xmm11,xmm20,0x11
        vpclmulqdq      xmm3,xmm11,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_493:

        or      r13,r13
        je      NEAR $L$_after_reduction_493
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_493:
        jmp     NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_15_479:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,2
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     zmm5,zmm5,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  zmm5,zmm5,zmm11
        vextracti32x4   xmm12,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb zmm10,zmm4,zmm29
        vpshufb zmm11,zmm5,zmm29
        vextracti32x4   xmm13,zmm11,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_494





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm11,zmm20,0x01
        vpclmulqdq      zmm5,zmm11,zmm20,0x10
        vpclmulqdq      zmm0,zmm11,zmm20,0x11
        vpclmulqdq      zmm3,zmm11,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_494
$L$_small_initial_partial_block_494:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm11,ymm20,0x01
        vpclmulqdq      ymm5,ymm11,ymm20,0x10
        vpclmulqdq      ymm0,ymm11,ymm20,0x11
        vpclmulqdq      ymm3,ymm11,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_494:

        or      r13,r13
        je      NEAR $L$_after_reduction_494
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_494:
        jmp     NEAR $L$_small_initial_blocks_encrypted_479
$L$_small_initial_num_blocks_is_16_479:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,3
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     zmm5,zmm5,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  zmm5,zmm5,zmm11
        vextracti32x4   xmm12,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm0,zmm29
        vpshufb zmm7,zmm3,zmm29
        vpshufb zmm10,zmm4,zmm29
        vpshufb zmm11,zmm5,zmm29
        vextracti32x4   xmm13,zmm11,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_495:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm11,zmm20,0x01
        vpclmulqdq      zmm5,zmm11,zmm20,0x10
        vpclmulqdq      zmm0,zmm11,zmm20,0x11
        vpclmulqdq      zmm3,zmm11,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_495:
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_495:
$L$_small_initial_blocks_encrypted_479:
$L$_ghash_done_334:
        vmovdqu64       XMMWORD[rdx],xmm2
        vmovdqu64       XMMWORD[64+rdx],xmm14
$L$_enc_dec_done_334:
        jmp     NEAR $L$exit_gcm_encrypt
$L$exit_gcm_encrypt:
        cmp     QWORD[112+rbp],256
        jbe     NEAR $L$skip_hkeys_cleanup_496
        vpxor   xmm0,xmm0,xmm0
        vmovdqa64       ZMMWORD[rsp],zmm0
        vmovdqa64       ZMMWORD[64+rsp],zmm0
        vmovdqa64       ZMMWORD[128+rsp],zmm0
        vmovdqa64       ZMMWORD[192+rsp],zmm0
        vmovdqa64       ZMMWORD[256+rsp],zmm0
        vmovdqa64       ZMMWORD[320+rsp],zmm0
        vmovdqa64       ZMMWORD[384+rsp],zmm0
        vmovdqa64       ZMMWORD[448+rsp],zmm0
        vmovdqa64       ZMMWORD[512+rsp],zmm0
        vmovdqa64       ZMMWORD[576+rsp],zmm0
        vmovdqa64       ZMMWORD[640+rsp],zmm0
        vmovdqa64       ZMMWORD[704+rsp],zmm0
$L$skip_hkeys_cleanup_496:
        vzeroupper
        vmovdqu xmm15,XMMWORD[((-16))+rbp]
        vmovdqu xmm14,XMMWORD[((-32))+rbp]
        vmovdqu xmm13,XMMWORD[((-48))+rbp]
        vmovdqu xmm12,XMMWORD[((-64))+rbp]
        vmovdqu xmm11,XMMWORD[((-80))+rbp]
        vmovdqu xmm10,XMMWORD[((-96))+rbp]
        vmovdqu xmm9,XMMWORD[((-112))+rbp]
        vmovdqu xmm8,XMMWORD[((-128))+rbp]
        vmovdqu xmm7,XMMWORD[((-144))+rbp]
        vmovdqu xmm6,XMMWORD[((-160))+rbp]
        lea     rsp,[8+rbp]
        pop     rsi

        pop     rdi

        pop     r15

        pop     r14

        pop     r13

        pop     r12

        pop     rbp

        pop     rbx

        DB      0F3h,0C3h               ;repret
$L$encrypt_seh_end:


global  ossl_aes_gcm_decrypt_avx512

ALIGN   32
ossl_aes_gcm_decrypt_avx512:

$L$decrypt_seh_begin:
DB      243,15,30,250
        push    rbx

$L$decrypt_seh_push_rbx:
        push    rbp

$L$decrypt_seh_push_rbp:
        push    r12

$L$decrypt_seh_push_r12:
        push    r13

$L$decrypt_seh_push_r13:
        push    r14

$L$decrypt_seh_push_r14:
        push    r15

$L$decrypt_seh_push_r15:
        push    rdi
$L$decrypt_seh_push_rdi:
        push    rsi
$L$decrypt_seh_push_rsi:

        sub     rsp,168
$L$decrypt_seh_allocstack_xmm:










        lea     rbp,[160+rsp]

$L$decrypt_seh_setfp:
        vmovdqu XMMWORD[rsp],xmm6
$L$decrypt_seh_save_xmm6:
        vmovdqu XMMWORD[16+rsp],xmm7
$L$decrypt_seh_save_xmm7:
        vmovdqu XMMWORD[32+rsp],xmm8
$L$decrypt_seh_save_xmm8:
        vmovdqu XMMWORD[48+rsp],xmm9
$L$decrypt_seh_save_xmm9:
        vmovdqu XMMWORD[64+rsp],xmm10
$L$decrypt_seh_save_xmm10:
        vmovdqu XMMWORD[80+rsp],xmm11
$L$decrypt_seh_save_xmm11:
        vmovdqu XMMWORD[96+rsp],xmm12
$L$decrypt_seh_save_xmm12:
        vmovdqu XMMWORD[112+rsp],xmm13
$L$decrypt_seh_save_xmm13:
        vmovdqu XMMWORD[128+rsp],xmm14
$L$decrypt_seh_save_xmm14:
        vmovdqu XMMWORD[144+rsp],xmm15
$L$decrypt_seh_save_xmm15:

$L$decrypt_seh_prolog_end:
        sub     rsp,1584
        and     rsp,(-64)


        mov     eax,DWORD[240+rcx]
        cmp     eax,9
        je      NEAR $L$aes_gcm_decrypt_128_avx512
        cmp     eax,11
        je      NEAR $L$aes_gcm_decrypt_192_avx512
        cmp     eax,13
        je      NEAR $L$aes_gcm_decrypt_256_avx512
        xor     eax,eax
        jmp     NEAR $L$exit_gcm_decrypt
ALIGN   32
$L$aes_gcm_decrypt_128_avx512:
        cmp     QWORD[112+rbp],0
        je      NEAR $L$_enc_dec_done_497
        xor     r14,r14
        vmovdqu64       xmm14,XMMWORD[64+rdx]

        mov     r11,QWORD[r8]
        or      r11,r11
        je      NEAR $L$_partial_block_done_498
        mov     r10d,16
        lea     r12,[byte_len_to_mask_table]
        cmp     QWORD[112+rbp],r10
        cmovc   r10,QWORD[112+rbp]
        add     r12,r10
        add     r12,r10
        kmovw   k1,[r12]
        vmovdqu8        xmm0{k1}{z},[r9]

        vmovdqu64       xmm3,XMMWORD[16+rdx]
        vmovdqu64       xmm4,XMMWORD[336+rdx]



        lea     r12,[SHIFT_MASK]
        add     r12,r11
        vmovdqu64       xmm5,XMMWORD[r12]
        vpshufb xmm3,xmm3,xmm5

        vmovdqa64       xmm6,xmm0
        vpxorq  xmm3,xmm3,xmm0


        mov     r13,QWORD[112+rbp]
        add     r13,r11
        sub     r13,16
        jge     NEAR $L$_no_extra_mask_498
        sub     r12,r13
$L$_no_extra_mask_498:



        vmovdqu64       xmm0,XMMWORD[16+r12]
        vpand   xmm3,xmm3,xmm0
        vpand   xmm6,xmm6,xmm0
        vpshufb xmm6,xmm6,XMMWORD[SHUF_MASK]
        vpshufb xmm6,xmm6,xmm5
        vpxorq  xmm14,xmm14,xmm6
        cmp     r13,0
        jl      NEAR $L$_partial_incomplete_498

        vpclmulqdq      xmm7,xmm14,xmm4,0x11
        vpclmulqdq      xmm10,xmm14,xmm4,0x00
        vpclmulqdq      xmm11,xmm14,xmm4,0x01
        vpclmulqdq      xmm14,xmm14,xmm4,0x10
        vpxorq  xmm14,xmm14,xmm11

        vpsrldq xmm11,xmm14,8
        vpslldq xmm14,xmm14,8
        vpxorq  xmm7,xmm7,xmm11
        vpxorq  xmm14,xmm14,xmm10



        vmovdqu64       xmm11,XMMWORD[POLY2]

        vpclmulqdq      xmm10,xmm11,xmm14,0x01
        vpslldq xmm10,xmm10,8
        vpxorq  xmm14,xmm14,xmm10



        vpclmulqdq      xmm10,xmm11,xmm14,0x00
        vpsrldq xmm10,xmm10,4
        vpclmulqdq      xmm14,xmm11,xmm14,0x10
        vpslldq xmm14,xmm14,4

        vpternlogq      xmm14,xmm7,xmm10,0x96

        mov     QWORD[r8],0

        mov     r12,r11
        mov     r11,16
        sub     r11,r12
        jmp     NEAR $L$_enc_dec_done_498

$L$_partial_incomplete_498:
        mov     r12,QWORD[112+rbp]
        add     QWORD[r8],r12
        mov     r11,QWORD[112+rbp]

$L$_enc_dec_done_498:


        lea     r12,[byte_len_to_mask_table]
        kmovw   k1,[r11*2+r12]
        vmovdqu64       XMMWORD[64+rdx],xmm14
        mov     r12,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r12]{k1},xmm3
$L$_partial_block_done_498:
        vmovdqu64       xmm2,XMMWORD[rdx]
        mov     r13,QWORD[112+rbp]
        sub     r13,r11
        je      NEAR $L$_enc_dec_done_497
        cmp     r13,256
        jbe     NEAR $L$_message_below_equal_16_blocks_497

        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vmovdqa64       zmm27,ZMMWORD[ddq_addbe_4444]
        vmovdqa64       zmm28,ZMMWORD[ddq_addbe_1234]






        vmovd   r15d,xmm2
        and     r15d,255

        vshufi64x2      zmm2,zmm2,zmm2,0
        vpshufb zmm2,zmm2,zmm29



        cmp     r15b,240
        jae     NEAR $L$_next_16_overflow_499
        vpaddd  zmm7,zmm2,zmm28
        vpaddd  zmm10,zmm7,zmm27
        vpaddd  zmm11,zmm10,zmm27
        vpaddd  zmm12,zmm11,zmm27
        jmp     NEAR $L$_next_16_ok_499
$L$_next_16_overflow_499:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm12,ZMMWORD[ddq_add_4444]
        vpaddd  zmm7,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm10,zmm7,zmm12
        vpaddd  zmm11,zmm10,zmm12
        vpaddd  zmm12,zmm11,zmm12
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vpshufb zmm12,zmm12,zmm29
$L$_next_16_ok_499:
        vshufi64x2      zmm2,zmm12,zmm12,255
        add     r15b,16

        vmovdqu8        zmm0,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm3,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm4,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm5,ZMMWORD[192+r11*1+r9]


        vbroadcastf64x2 zmm6,ZMMWORD[rcx]
        vpxorq  zmm7,zmm7,zmm6
        vpxorq  zmm10,zmm10,zmm6
        vpxorq  zmm11,zmm11,zmm6
        vpxorq  zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[16+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[32+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[48+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[64+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[80+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[96+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[112+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[128+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[144+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[160+rcx]
        vaesenclast     zmm7,zmm7,zmm6
        vaesenclast     zmm10,zmm10,zmm6
        vaesenclast     zmm11,zmm11,zmm6
        vaesenclast     zmm12,zmm12,zmm6


        vpxorq  zmm7,zmm7,zmm0
        vpxorq  zmm10,zmm10,zmm3
        vpxorq  zmm11,zmm11,zmm4
        vpxorq  zmm12,zmm12,zmm5


        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm7
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm10
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm11
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm12

        vpshufb zmm7,zmm0,zmm29
        vpshufb zmm10,zmm3,zmm29
        vpshufb zmm11,zmm4,zmm29
        vpshufb zmm12,zmm5,zmm29
        vmovdqa64       ZMMWORD[768+rsp],zmm7
        vmovdqa64       ZMMWORD[832+rsp],zmm10
        vmovdqa64       ZMMWORD[896+rsp],zmm11
        vmovdqa64       ZMMWORD[960+rsp],zmm12
        test    r14,r14
        jnz     NEAR $L$_skip_hkeys_precomputation_500

        vmovdqu64       zmm0,ZMMWORD[288+rdx]
        vmovdqu64       ZMMWORD[704+rsp],zmm0

        vmovdqu64       zmm3,ZMMWORD[224+rdx]
        vmovdqu64       ZMMWORD[640+rsp],zmm3


        vshufi64x2      zmm3,zmm3,zmm3,0x00

        vmovdqu64       zmm4,ZMMWORD[160+rdx]
        vmovdqu64       ZMMWORD[576+rsp],zmm4

        vmovdqu64       zmm5,ZMMWORD[96+rdx]
        vmovdqu64       ZMMWORD[512+rsp],zmm5
$L$_skip_hkeys_precomputation_500:
        cmp     r13,512
        jb      NEAR $L$_message_below_32_blocks_497



        cmp     r15b,240
        jae     NEAR $L$_next_16_overflow_501
        vpaddd  zmm7,zmm2,zmm28
        vpaddd  zmm10,zmm7,zmm27
        vpaddd  zmm11,zmm10,zmm27
        vpaddd  zmm12,zmm11,zmm27
        jmp     NEAR $L$_next_16_ok_501
$L$_next_16_overflow_501:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm12,ZMMWORD[ddq_add_4444]
        vpaddd  zmm7,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm10,zmm7,zmm12
        vpaddd  zmm11,zmm10,zmm12
        vpaddd  zmm12,zmm11,zmm12
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vpshufb zmm12,zmm12,zmm29
$L$_next_16_ok_501:
        vshufi64x2      zmm2,zmm12,zmm12,255
        add     r15b,16

        vmovdqu8        zmm0,ZMMWORD[256+r11*1+r9]
        vmovdqu8        zmm3,ZMMWORD[320+r11*1+r9]
        vmovdqu8        zmm4,ZMMWORD[384+r11*1+r9]
        vmovdqu8        zmm5,ZMMWORD[448+r11*1+r9]


        vbroadcastf64x2 zmm6,ZMMWORD[rcx]
        vpxorq  zmm7,zmm7,zmm6
        vpxorq  zmm10,zmm10,zmm6
        vpxorq  zmm11,zmm11,zmm6
        vpxorq  zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[16+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[32+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[48+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[64+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[80+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[96+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[112+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[128+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[144+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[160+rcx]
        vaesenclast     zmm7,zmm7,zmm6
        vaesenclast     zmm10,zmm10,zmm6
        vaesenclast     zmm11,zmm11,zmm6
        vaesenclast     zmm12,zmm12,zmm6


        vpxorq  zmm7,zmm7,zmm0
        vpxorq  zmm10,zmm10,zmm3
        vpxorq  zmm11,zmm11,zmm4
        vpxorq  zmm12,zmm12,zmm5


        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[256+r11*1+r10],zmm7
        vmovdqu8        ZMMWORD[320+r11*1+r10],zmm10
        vmovdqu8        ZMMWORD[384+r11*1+r10],zmm11
        vmovdqu8        ZMMWORD[448+r11*1+r10],zmm12

        vpshufb zmm7,zmm0,zmm29
        vpshufb zmm10,zmm3,zmm29
        vpshufb zmm11,zmm4,zmm29
        vpshufb zmm12,zmm5,zmm29
        vmovdqa64       ZMMWORD[1024+rsp],zmm7
        vmovdqa64       ZMMWORD[1088+rsp],zmm10
        vmovdqa64       ZMMWORD[1152+rsp],zmm11
        vmovdqa64       ZMMWORD[1216+rsp],zmm12
        test    r14,r14
        jnz     NEAR $L$_skip_hkeys_precomputation_502
        vmovdqu64       zmm3,ZMMWORD[640+rsp]


        vshufi64x2      zmm3,zmm3,zmm3,0x00

        vmovdqu64       zmm4,ZMMWORD[576+rsp]
        vmovdqu64       zmm5,ZMMWORD[512+rsp]

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[448+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[384+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[320+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[256+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[192+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[128+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[64+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[rsp],zmm5
$L$_skip_hkeys_precomputation_502:
        mov     r14,1
        add     r11,512
        sub     r13,512

        cmp     r13,768
        jb      NEAR $L$_no_more_big_nblocks_497
$L$_encrypt_big_nblocks_497:
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_503
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_503
$L$_16_blocks_overflow_503:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_503:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[192+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm26,zmm10,zmm15
        vpxorq  zmm24,zmm6,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm5
        vpshufb zmm0,zmm17,zmm29
        vpshufb zmm3,zmm19,zmm29
        vpshufb zmm4,zmm20,zmm29
        vpshufb zmm5,zmm21,zmm29
        vmovdqa64       ZMMWORD[1280+rsp],zmm0
        vmovdqa64       ZMMWORD[1344+rsp],zmm3
        vmovdqa64       ZMMWORD[1408+rsp],zmm4
        vmovdqa64       ZMMWORD[1472+rsp],zmm5
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_504
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_504
$L$_16_blocks_overflow_504:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_504:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[256+rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[320+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[384+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[448+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[256+r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[320+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[384+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[448+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vpternlogq      zmm24,zmm6,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[256+r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[320+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[384+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[448+r11*1+r10],zmm5
        vpshufb zmm0,zmm17,zmm29
        vpshufb zmm3,zmm19,zmm29
        vpshufb zmm4,zmm20,zmm29
        vpshufb zmm5,zmm21,zmm29
        vmovdqa64       ZMMWORD[768+rsp],zmm0
        vmovdqa64       ZMMWORD[832+rsp],zmm3
        vmovdqa64       ZMMWORD[896+rsp],zmm4
        vmovdqa64       ZMMWORD[960+rsp],zmm5
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_505
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_505
$L$_16_blocks_overflow_505:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_505:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[512+r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[576+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[640+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[704+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]


        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96

        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpternlogq      zmm6,zmm12,zmm15,0x96
        vpxorq  zmm6,zmm6,zmm24
        vpternlogq      zmm7,zmm13,zmm10,0x96
        vpxorq  zmm7,zmm7,zmm25
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vextracti64x4   ymm12,zmm6,1
        vpxorq  ymm6,ymm6,ymm12
        vextracti32x4   xmm12,ymm6,1
        vpxorq  xmm6,xmm6,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm6,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[512+r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[576+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[640+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[704+r11*1+r10],zmm5
        vpshufb zmm0,zmm17,zmm29
        vpshufb zmm3,zmm19,zmm29
        vpshufb zmm4,zmm20,zmm29
        vpshufb zmm5,zmm21,zmm29
        vmovdqa64       ZMMWORD[1024+rsp],zmm0
        vmovdqa64       ZMMWORD[1088+rsp],zmm3
        vmovdqa64       ZMMWORD[1152+rsp],zmm4
        vmovdqa64       ZMMWORD[1216+rsp],zmm5
        vmovdqa64       zmm14,zmm6

        add     r11,768
        sub     r13,768
        cmp     r13,768
        jae     NEAR $L$_encrypt_big_nblocks_497

$L$_no_more_big_nblocks_497:

        cmp     r13,512
        jae     NEAR $L$_encrypt_32_blocks_497

        cmp     r13,256
        jae     NEAR $L$_encrypt_16_blocks_497
$L$_encrypt_0_blocks_ghash_32_497:
        mov     r10d,r13d
        and     r10d,~15
        mov     ebx,256
        sub     ebx,r10d
        vmovdqa64       zmm13,ZMMWORD[768+rsp]
        vpxorq  zmm13,zmm13,zmm14
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[832+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpxorq  zmm26,zmm4,zmm10
        vpxorq  zmm24,zmm0,zmm6
        vpxorq  zmm25,zmm3,zmm7
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[896+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[960+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        add     ebx,256
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_506

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_506
        jb      NEAR $L$_last_num_blocks_is_7_1_506


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_506
        jb      NEAR $L$_last_num_blocks_is_11_9_506


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_506
        ja      NEAR $L$_last_num_blocks_is_16_506
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_506
        jmp     NEAR $L$_last_num_blocks_is_13_506

$L$_last_num_blocks_is_11_9_506:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_506
        ja      NEAR $L$_last_num_blocks_is_11_506
        jmp     NEAR $L$_last_num_blocks_is_9_506

$L$_last_num_blocks_is_7_1_506:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_506
        jb      NEAR $L$_last_num_blocks_is_3_1_506

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_506
        je      NEAR $L$_last_num_blocks_is_6_506
        jmp     NEAR $L$_last_num_blocks_is_5_506

$L$_last_num_blocks_is_3_1_506:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_506
        je      NEAR $L$_last_num_blocks_is_2_506
$L$_last_num_blocks_is_1_506:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_507
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_507

$L$_16_blocks_overflow_507:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_507:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm31
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb xmm17,xmm17,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_508





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_508
$L$_small_initial_partial_block_508:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11


        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm0,XMMWORD[POLY2]


        vpclmulqdq      xmm3,xmm0,xmm25,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm3,xmm25,xmm3


        vpclmulqdq      xmm4,xmm0,xmm3,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm14,xmm0,xmm3,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm4,xmm24,0x96












        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_508
$L$_small_initial_compute_done_508:
$L$_after_reduction_508:
        jmp     NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_2_506:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_509
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_509

$L$_16_blocks_overflow_509:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_509:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm31
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb ymm17,ymm17,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_510





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_510
$L$_small_initial_partial_block_510:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_510:

        or      r13,r13
        je      NEAR $L$_after_reduction_510
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_510:
        jmp     NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_3_506:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_511
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_511

$L$_16_blocks_overflow_511:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_511:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_512





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_512
$L$_small_initial_partial_block_512:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_512:

        or      r13,r13
        je      NEAR $L$_after_reduction_512
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_512:
        jmp     NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_4_506:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_513
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_513

$L$_16_blocks_overflow_513:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_513:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_514





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_514
$L$_small_initial_partial_block_514:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_514:

        or      r13,r13
        je      NEAR $L$_after_reduction_514
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_514:
        jmp     NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_5_506:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_515
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_515

$L$_16_blocks_overflow_515:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_515:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb xmm19,xmm19,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_516





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_516
$L$_small_initial_partial_block_516:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_516:

        or      r13,r13
        je      NEAR $L$_after_reduction_516
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_516:
        jmp     NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_6_506:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_517
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_517

$L$_16_blocks_overflow_517:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_517:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb ymm19,ymm19,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_518





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_518
$L$_small_initial_partial_block_518:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_518:

        or      r13,r13
        je      NEAR $L$_after_reduction_518
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_518:
        jmp     NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_7_506:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_519
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_519

$L$_16_blocks_overflow_519:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_519:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_520





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_520
$L$_small_initial_partial_block_520:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_520:

        or      r13,r13
        je      NEAR $L$_after_reduction_520
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_520:
        jmp     NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_8_506:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_521
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_521

$L$_16_blocks_overflow_521:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_521:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_522





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_522
$L$_small_initial_partial_block_522:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_522:

        or      r13,r13
        je      NEAR $L$_after_reduction_522
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_522:
        jmp     NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_9_506:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_523
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_523

$L$_16_blocks_overflow_523:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_523:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb xmm20,xmm20,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_524





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_524
$L$_small_initial_partial_block_524:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_524:

        or      r13,r13
        je      NEAR $L$_after_reduction_524
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_524:
        jmp     NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_10_506:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_525
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_525

$L$_16_blocks_overflow_525:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_525:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb ymm20,ymm20,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_526





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_526
$L$_small_initial_partial_block_526:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_526:

        or      r13,r13
        je      NEAR $L$_after_reduction_526
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_526:
        jmp     NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_11_506:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_527
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_527

$L$_16_blocks_overflow_527:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_527:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_528





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_528
$L$_small_initial_partial_block_528:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_528:

        or      r13,r13
        je      NEAR $L$_after_reduction_528
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_528:
        jmp     NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_12_506:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_529
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_529

$L$_16_blocks_overflow_529:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_529:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_530





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_530
$L$_small_initial_partial_block_530:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_530:

        or      r13,r13
        je      NEAR $L$_after_reduction_530
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_530:
        jmp     NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_13_506:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_531
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_531

$L$_16_blocks_overflow_531:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_531:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb xmm21,xmm21,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_532





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_532
$L$_small_initial_partial_block_532:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_532:

        or      r13,r13
        je      NEAR $L$_after_reduction_532
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_532:
        jmp     NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_14_506:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_533
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_533

$L$_16_blocks_overflow_533:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_533:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb ymm21,ymm21,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_534





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_534
$L$_small_initial_partial_block_534:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_534:

        or      r13,r13
        je      NEAR $L$_after_reduction_534
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_534:
        jmp     NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_15_506:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_535
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_535

$L$_16_blocks_overflow_535:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_535:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_536





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_536
$L$_small_initial_partial_block_536:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_536:

        or      r13,r13
        je      NEAR $L$_after_reduction_536
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_536:
        jmp     NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_16_506:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_537
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_537

$L$_16_blocks_overflow_537:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_537:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_538:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_538:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_538:
        jmp     NEAR $L$_last_blocks_done_506
$L$_last_num_blocks_is_0_506:
        vmovdqa64       zmm13,ZMMWORD[1024+rsp]
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1088+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1152+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1216+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_506:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_497
$L$_encrypt_32_blocks_497:
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_539
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_539
$L$_16_blocks_overflow_539:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_539:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[192+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm26,zmm10,zmm15
        vpxorq  zmm24,zmm6,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm5
        vpshufb zmm0,zmm17,zmm29
        vpshufb zmm3,zmm19,zmm29
        vpshufb zmm4,zmm20,zmm29
        vpshufb zmm5,zmm21,zmm29
        vmovdqa64       ZMMWORD[1280+rsp],zmm0
        vmovdqa64       ZMMWORD[1344+rsp],zmm3
        vmovdqa64       ZMMWORD[1408+rsp],zmm4
        vmovdqa64       ZMMWORD[1472+rsp],zmm5
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_540
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_540
$L$_16_blocks_overflow_540:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_540:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[256+rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[320+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[384+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[448+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[256+r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[320+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[384+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[448+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vpternlogq      zmm24,zmm6,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[256+r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[320+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[384+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[448+r11*1+r10],zmm5
        vpshufb zmm0,zmm17,zmm29
        vpshufb zmm3,zmm19,zmm29
        vpshufb zmm4,zmm20,zmm29
        vpshufb zmm5,zmm21,zmm29
        vmovdqa64       ZMMWORD[768+rsp],zmm0
        vmovdqa64       ZMMWORD[832+rsp],zmm3
        vmovdqa64       ZMMWORD[896+rsp],zmm4
        vmovdqa64       ZMMWORD[960+rsp],zmm5
        vmovdqa64       zmm13,ZMMWORD[1280+rsp]
        vmovdqu64       zmm12,ZMMWORD[512+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1344+rsp]
        vmovdqu64       zmm12,ZMMWORD[576+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1408+rsp]
        vmovdqu64       zmm12,ZMMWORD[640+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1472+rsp]
        vmovdqu64       zmm12,ZMMWORD[704+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

        sub     r13,512
        add     r11,512
        mov     r10d,r13d
        and     r10d,~15
        mov     ebx,512
        sub     ebx,r10d
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_541

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_541
        jb      NEAR $L$_last_num_blocks_is_7_1_541


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_541
        jb      NEAR $L$_last_num_blocks_is_11_9_541


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_541
        ja      NEAR $L$_last_num_blocks_is_16_541
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_541
        jmp     NEAR $L$_last_num_blocks_is_13_541

$L$_last_num_blocks_is_11_9_541:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_541
        ja      NEAR $L$_last_num_blocks_is_11_541
        jmp     NEAR $L$_last_num_blocks_is_9_541

$L$_last_num_blocks_is_7_1_541:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_541
        jb      NEAR $L$_last_num_blocks_is_3_1_541

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_541
        je      NEAR $L$_last_num_blocks_is_6_541
        jmp     NEAR $L$_last_num_blocks_is_5_541

$L$_last_num_blocks_is_3_1_541:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_541
        je      NEAR $L$_last_num_blocks_is_2_541
$L$_last_num_blocks_is_1_541:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_542
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_542

$L$_16_blocks_overflow_542:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_542:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm31
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb xmm17,xmm17,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_543





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_543
$L$_small_initial_partial_block_543:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11


        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm0,XMMWORD[POLY2]


        vpclmulqdq      xmm3,xmm0,xmm25,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm3,xmm25,xmm3


        vpclmulqdq      xmm4,xmm0,xmm3,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm14,xmm0,xmm3,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm4,xmm24,0x96












        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_543
$L$_small_initial_compute_done_543:
$L$_after_reduction_543:
        jmp     NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_2_541:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_544
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_544

$L$_16_blocks_overflow_544:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_544:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm31
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb ymm17,ymm17,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_545





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_545
$L$_small_initial_partial_block_545:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_545:

        or      r13,r13
        je      NEAR $L$_after_reduction_545
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_545:
        jmp     NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_3_541:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_546
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_546

$L$_16_blocks_overflow_546:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_546:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_547





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_547
$L$_small_initial_partial_block_547:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_547:

        or      r13,r13
        je      NEAR $L$_after_reduction_547
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_547:
        jmp     NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_4_541:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_548
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_548

$L$_16_blocks_overflow_548:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_548:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_549





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_549
$L$_small_initial_partial_block_549:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_549:

        or      r13,r13
        je      NEAR $L$_after_reduction_549
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_549:
        jmp     NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_5_541:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_550
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_550

$L$_16_blocks_overflow_550:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_550:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb xmm19,xmm19,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_551





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_551
$L$_small_initial_partial_block_551:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_551:

        or      r13,r13
        je      NEAR $L$_after_reduction_551
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_551:
        jmp     NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_6_541:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_552
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_552

$L$_16_blocks_overflow_552:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_552:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb ymm19,ymm19,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_553





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_553
$L$_small_initial_partial_block_553:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_553:

        or      r13,r13
        je      NEAR $L$_after_reduction_553
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_553:
        jmp     NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_7_541:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_554
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_554

$L$_16_blocks_overflow_554:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_554:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_555





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_555
$L$_small_initial_partial_block_555:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_555:

        or      r13,r13
        je      NEAR $L$_after_reduction_555
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_555:
        jmp     NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_8_541:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_556
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_556

$L$_16_blocks_overflow_556:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_556:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_557





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_557
$L$_small_initial_partial_block_557:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_557:

        or      r13,r13
        je      NEAR $L$_after_reduction_557
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_557:
        jmp     NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_9_541:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_558
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_558

$L$_16_blocks_overflow_558:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_558:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb xmm20,xmm20,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_559





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_559
$L$_small_initial_partial_block_559:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_559:

        or      r13,r13
        je      NEAR $L$_after_reduction_559
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_559:
        jmp     NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_10_541:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_560
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_560

$L$_16_blocks_overflow_560:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_560:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb ymm20,ymm20,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_561





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_561
$L$_small_initial_partial_block_561:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_561:

        or      r13,r13
        je      NEAR $L$_after_reduction_561
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_561:
        jmp     NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_11_541:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_562
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_562

$L$_16_blocks_overflow_562:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_562:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_563





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_563
$L$_small_initial_partial_block_563:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_563:

        or      r13,r13
        je      NEAR $L$_after_reduction_563
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_563:
        jmp     NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_12_541:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_564
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_564

$L$_16_blocks_overflow_564:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_564:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_565





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_565
$L$_small_initial_partial_block_565:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_565:

        or      r13,r13
        je      NEAR $L$_after_reduction_565
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_565:
        jmp     NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_13_541:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_566
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_566

$L$_16_blocks_overflow_566:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_566:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb xmm21,xmm21,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_567





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_567
$L$_small_initial_partial_block_567:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_567:

        or      r13,r13
        je      NEAR $L$_after_reduction_567
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_567:
        jmp     NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_14_541:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_568
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_568

$L$_16_blocks_overflow_568:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_568:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb ymm21,ymm21,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_569





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_569
$L$_small_initial_partial_block_569:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_569:

        or      r13,r13
        je      NEAR $L$_after_reduction_569
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_569:
        jmp     NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_15_541:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_570
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_570

$L$_16_blocks_overflow_570:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_570:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_571





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_571
$L$_small_initial_partial_block_571:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_571:

        or      r13,r13
        je      NEAR $L$_after_reduction_571
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_571:
        jmp     NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_16_541:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_572
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_572

$L$_16_blocks_overflow_572:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_572:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_573:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_573:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_573:
        jmp     NEAR $L$_last_blocks_done_541
$L$_last_num_blocks_is_0_541:
        vmovdqa64       zmm13,ZMMWORD[768+rsp]
        vpxorq  zmm13,zmm13,zmm14
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[832+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpxorq  zmm26,zmm4,zmm10
        vpxorq  zmm24,zmm0,zmm6
        vpxorq  zmm25,zmm3,zmm7
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[896+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[960+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_541:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_497
$L$_encrypt_16_blocks_497:
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_574
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_574
$L$_16_blocks_overflow_574:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_574:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[192+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm26,zmm10,zmm15
        vpxorq  zmm24,zmm6,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm5
        vpshufb zmm0,zmm17,zmm29
        vpshufb zmm3,zmm19,zmm29
        vpshufb zmm4,zmm20,zmm29
        vpshufb zmm5,zmm21,zmm29
        vmovdqa64       ZMMWORD[1280+rsp],zmm0
        vmovdqa64       ZMMWORD[1344+rsp],zmm3
        vmovdqa64       ZMMWORD[1408+rsp],zmm4
        vmovdqa64       ZMMWORD[1472+rsp],zmm5
        vmovdqa64       zmm13,ZMMWORD[1024+rsp]
        vmovdqu64       zmm12,ZMMWORD[256+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1088+rsp]
        vmovdqu64       zmm12,ZMMWORD[320+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1152+rsp]
        vmovdqu64       zmm12,ZMMWORD[384+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1216+rsp]
        vmovdqu64       zmm12,ZMMWORD[448+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        sub     r13,256
        add     r11,256
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_575

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_575
        jb      NEAR $L$_last_num_blocks_is_7_1_575


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_575
        jb      NEAR $L$_last_num_blocks_is_11_9_575


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_575
        ja      NEAR $L$_last_num_blocks_is_16_575
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_575
        jmp     NEAR $L$_last_num_blocks_is_13_575

$L$_last_num_blocks_is_11_9_575:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_575
        ja      NEAR $L$_last_num_blocks_is_11_575
        jmp     NEAR $L$_last_num_blocks_is_9_575

$L$_last_num_blocks_is_7_1_575:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_575
        jb      NEAR $L$_last_num_blocks_is_3_1_575

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_575
        je      NEAR $L$_last_num_blocks_is_6_575
        jmp     NEAR $L$_last_num_blocks_is_5_575

$L$_last_num_blocks_is_3_1_575:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_575
        je      NEAR $L$_last_num_blocks_is_2_575
$L$_last_num_blocks_is_1_575:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_576
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_576

$L$_16_blocks_overflow_576:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_576:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc xmm0,xmm0,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb xmm17,xmm17,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_577





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_577
$L$_small_initial_partial_block_577:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11











        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_577
$L$_small_initial_compute_done_577:
$L$_after_reduction_577:
        jmp     NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_2_575:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_578
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_578

$L$_16_blocks_overflow_578:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_578:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc ymm0,ymm0,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb ymm17,ymm17,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_579





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_579
$L$_small_initial_partial_block_579:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_579:

        or      r13,r13
        je      NEAR $L$_after_reduction_579
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_579:
        jmp     NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_3_575:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_580
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_580

$L$_16_blocks_overflow_580:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_580:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_581





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_581
$L$_small_initial_partial_block_581:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_581:

        or      r13,r13
        je      NEAR $L$_after_reduction_581
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_581:
        jmp     NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_4_575:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_582
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_582

$L$_16_blocks_overflow_582:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_582:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_583





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_583
$L$_small_initial_partial_block_583:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_583:

        or      r13,r13
        je      NEAR $L$_after_reduction_583
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_583:
        jmp     NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_5_575:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_584
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_584

$L$_16_blocks_overflow_584:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_584:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb xmm19,xmm19,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_585





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_585
$L$_small_initial_partial_block_585:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_585:

        or      r13,r13
        je      NEAR $L$_after_reduction_585
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_585:
        jmp     NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_6_575:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_586
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_586

$L$_16_blocks_overflow_586:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_586:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb ymm19,ymm19,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_587





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_587
$L$_small_initial_partial_block_587:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_587:

        or      r13,r13
        je      NEAR $L$_after_reduction_587
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_587:
        jmp     NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_7_575:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_588
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_588

$L$_16_blocks_overflow_588:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_588:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_589





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_589
$L$_small_initial_partial_block_589:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_589:

        or      r13,r13
        je      NEAR $L$_after_reduction_589
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_589:
        jmp     NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_8_575:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_590
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_590

$L$_16_blocks_overflow_590:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_590:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_591





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_591
$L$_small_initial_partial_block_591:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_591:

        or      r13,r13
        je      NEAR $L$_after_reduction_591
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_591:
        jmp     NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_9_575:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_592
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_592

$L$_16_blocks_overflow_592:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_592:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb xmm20,xmm20,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_593





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_593
$L$_small_initial_partial_block_593:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_593:

        or      r13,r13
        je      NEAR $L$_after_reduction_593
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_593:
        jmp     NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_10_575:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_594
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_594

$L$_16_blocks_overflow_594:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_594:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb ymm20,ymm20,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_595





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_595
$L$_small_initial_partial_block_595:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_595:

        or      r13,r13
        je      NEAR $L$_after_reduction_595
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_595:
        jmp     NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_11_575:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_596
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_596

$L$_16_blocks_overflow_596:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_596:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_597





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_597
$L$_small_initial_partial_block_597:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_597:

        or      r13,r13
        je      NEAR $L$_after_reduction_597
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_597:
        jmp     NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_12_575:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_598
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_598

$L$_16_blocks_overflow_598:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_598:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_599





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_599
$L$_small_initial_partial_block_599:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_599:

        or      r13,r13
        je      NEAR $L$_after_reduction_599
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_599:
        jmp     NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_13_575:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_600
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_600

$L$_16_blocks_overflow_600:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_600:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb xmm21,xmm21,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_601





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_601
$L$_small_initial_partial_block_601:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_601:

        or      r13,r13
        je      NEAR $L$_after_reduction_601
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_601:
        jmp     NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_14_575:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_602
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_602

$L$_16_blocks_overflow_602:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_602:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb ymm21,ymm21,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_603





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_603
$L$_small_initial_partial_block_603:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_603:

        or      r13,r13
        je      NEAR $L$_after_reduction_603
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_603:
        jmp     NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_15_575:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_604
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_604

$L$_16_blocks_overflow_604:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_604:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_605





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_605
$L$_small_initial_partial_block_605:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_605:

        or      r13,r13
        je      NEAR $L$_after_reduction_605
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_605:
        jmp     NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_16_575:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_606
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_606

$L$_16_blocks_overflow_606:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_606:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_607:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_607:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_607:
        jmp     NEAR $L$_last_blocks_done_575
$L$_last_num_blocks_is_0_575:
        vmovdqa64       zmm13,ZMMWORD[1280+rsp]
        vmovdqu64       zmm12,ZMMWORD[512+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1344+rsp]
        vmovdqu64       zmm12,ZMMWORD[576+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1408+rsp]
        vmovdqu64       zmm12,ZMMWORD[640+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1472+rsp]
        vmovdqu64       zmm12,ZMMWORD[704+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_575:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_497

$L$_message_below_32_blocks_497:


        sub     r13,256
        add     r11,256
        mov     r10d,r13d
        test    r14,r14
        jnz     NEAR $L$_skip_hkeys_precomputation_608
        vmovdqu64       zmm3,ZMMWORD[640+rsp]


        vshufi64x2      zmm3,zmm3,zmm3,0x00

        vmovdqu64       zmm4,ZMMWORD[576+rsp]
        vmovdqu64       zmm5,ZMMWORD[512+rsp]

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[448+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[384+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[320+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[256+rsp],zmm5
$L$_skip_hkeys_precomputation_608:
        mov     r14,1
        and     r10d,~15
        mov     ebx,512
        sub     ebx,r10d
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_609

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_609
        jb      NEAR $L$_last_num_blocks_is_7_1_609


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_609
        jb      NEAR $L$_last_num_blocks_is_11_9_609


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_609
        ja      NEAR $L$_last_num_blocks_is_16_609
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_609
        jmp     NEAR $L$_last_num_blocks_is_13_609

$L$_last_num_blocks_is_11_9_609:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_609
        ja      NEAR $L$_last_num_blocks_is_11_609
        jmp     NEAR $L$_last_num_blocks_is_9_609

$L$_last_num_blocks_is_7_1_609:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_609
        jb      NEAR $L$_last_num_blocks_is_3_1_609

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_609
        je      NEAR $L$_last_num_blocks_is_6_609
        jmp     NEAR $L$_last_num_blocks_is_5_609

$L$_last_num_blocks_is_3_1_609:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_609
        je      NEAR $L$_last_num_blocks_is_2_609
$L$_last_num_blocks_is_1_609:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_610
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_610

$L$_16_blocks_overflow_610:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_610:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm31
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb xmm17,xmm17,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_611





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_611
$L$_small_initial_partial_block_611:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11


        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm0,XMMWORD[POLY2]


        vpclmulqdq      xmm3,xmm0,xmm25,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm3,xmm25,xmm3


        vpclmulqdq      xmm4,xmm0,xmm3,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm14,xmm0,xmm3,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm4,xmm24,0x96












        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_611
$L$_small_initial_compute_done_611:
$L$_after_reduction_611:
        jmp     NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_2_609:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_612
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_612

$L$_16_blocks_overflow_612:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_612:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm31
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb ymm17,ymm17,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_613





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_613
$L$_small_initial_partial_block_613:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_613:

        or      r13,r13
        je      NEAR $L$_after_reduction_613
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_613:
        jmp     NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_3_609:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_614
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_614

$L$_16_blocks_overflow_614:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_614:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_615





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_615
$L$_small_initial_partial_block_615:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_615:

        or      r13,r13
        je      NEAR $L$_after_reduction_615
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_615:
        jmp     NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_4_609:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_616
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_616

$L$_16_blocks_overflow_616:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_616:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_617





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_617
$L$_small_initial_partial_block_617:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_617:

        or      r13,r13
        je      NEAR $L$_after_reduction_617
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_617:
        jmp     NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_5_609:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_618
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_618

$L$_16_blocks_overflow_618:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_618:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb xmm19,xmm19,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_619





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_619
$L$_small_initial_partial_block_619:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_619:

        or      r13,r13
        je      NEAR $L$_after_reduction_619
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_619:
        jmp     NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_6_609:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_620
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_620

$L$_16_blocks_overflow_620:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_620:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb ymm19,ymm19,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_621





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_621
$L$_small_initial_partial_block_621:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_621:

        or      r13,r13
        je      NEAR $L$_after_reduction_621
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_621:
        jmp     NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_7_609:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_622
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_622

$L$_16_blocks_overflow_622:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_622:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_623





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_623
$L$_small_initial_partial_block_623:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_623:

        or      r13,r13
        je      NEAR $L$_after_reduction_623
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_623:
        jmp     NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_8_609:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_624
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_624

$L$_16_blocks_overflow_624:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_624:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_625





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_625
$L$_small_initial_partial_block_625:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_625:

        or      r13,r13
        je      NEAR $L$_after_reduction_625
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_625:
        jmp     NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_9_609:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_626
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_626

$L$_16_blocks_overflow_626:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_626:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb xmm20,xmm20,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_627





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_627
$L$_small_initial_partial_block_627:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_627:

        or      r13,r13
        je      NEAR $L$_after_reduction_627
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_627:
        jmp     NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_10_609:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_628
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_628

$L$_16_blocks_overflow_628:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_628:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb ymm20,ymm20,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_629





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_629
$L$_small_initial_partial_block_629:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_629:

        or      r13,r13
        je      NEAR $L$_after_reduction_629
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_629:
        jmp     NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_11_609:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_630
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_630

$L$_16_blocks_overflow_630:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_630:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_631





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_631
$L$_small_initial_partial_block_631:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_631:

        or      r13,r13
        je      NEAR $L$_after_reduction_631
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_631:
        jmp     NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_12_609:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_632
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_632

$L$_16_blocks_overflow_632:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_632:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_633





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_633
$L$_small_initial_partial_block_633:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_633:

        or      r13,r13
        je      NEAR $L$_after_reduction_633
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_633:
        jmp     NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_13_609:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_634
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_634

$L$_16_blocks_overflow_634:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_634:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb xmm21,xmm21,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_635





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_635
$L$_small_initial_partial_block_635:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_635:

        or      r13,r13
        je      NEAR $L$_after_reduction_635
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_635:
        jmp     NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_14_609:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_636
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_636

$L$_16_blocks_overflow_636:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_636:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb ymm21,ymm21,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_637





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_637
$L$_small_initial_partial_block_637:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_637:

        or      r13,r13
        je      NEAR $L$_after_reduction_637
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_637:
        jmp     NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_15_609:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_638
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_638

$L$_16_blocks_overflow_638:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_638:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_639





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_639
$L$_small_initial_partial_block_639:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_639:

        or      r13,r13
        je      NEAR $L$_after_reduction_639
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_639:
        jmp     NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_16_609:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_640
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_640

$L$_16_blocks_overflow_640:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_640:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_641:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_641:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_641:
        jmp     NEAR $L$_last_blocks_done_609
$L$_last_num_blocks_is_0_609:
        vmovdqa64       zmm13,ZMMWORD[768+rsp]
        vpxorq  zmm13,zmm13,zmm14
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[832+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpxorq  zmm26,zmm4,zmm10
        vpxorq  zmm24,zmm0,zmm6
        vpxorq  zmm25,zmm3,zmm7
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[896+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[960+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_609:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_497

$L$_message_below_equal_16_blocks_497:


        mov     r12d,r13d
        add     r12d,15
        shr     r12d,4
        cmp     r12,8
        je      NEAR $L$_small_initial_num_blocks_is_8_642
        jl      NEAR $L$_small_initial_num_blocks_is_7_1_642


        cmp     r12,12
        je      NEAR $L$_small_initial_num_blocks_is_12_642
        jl      NEAR $L$_small_initial_num_blocks_is_11_9_642


        cmp     r12,16
        je      NEAR $L$_small_initial_num_blocks_is_16_642
        cmp     r12,15
        je      NEAR $L$_small_initial_num_blocks_is_15_642
        cmp     r12,14
        je      NEAR $L$_small_initial_num_blocks_is_14_642
        jmp     NEAR $L$_small_initial_num_blocks_is_13_642

$L$_small_initial_num_blocks_is_11_9_642:

        cmp     r12,11
        je      NEAR $L$_small_initial_num_blocks_is_11_642
        cmp     r12,10
        je      NEAR $L$_small_initial_num_blocks_is_10_642
        jmp     NEAR $L$_small_initial_num_blocks_is_9_642

$L$_small_initial_num_blocks_is_7_1_642:
        cmp     r12,4
        je      NEAR $L$_small_initial_num_blocks_is_4_642
        jl      NEAR $L$_small_initial_num_blocks_is_3_1_642

        cmp     r12,7
        je      NEAR $L$_small_initial_num_blocks_is_7_642
        cmp     r12,6
        je      NEAR $L$_small_initial_num_blocks_is_6_642
        jmp     NEAR $L$_small_initial_num_blocks_is_5_642

$L$_small_initial_num_blocks_is_3_1_642:

        cmp     r12,3
        je      NEAR $L$_small_initial_num_blocks_is_3_642
        cmp     r12,2
        je      NEAR $L$_small_initial_num_blocks_is_2_642





$L$_small_initial_num_blocks_is_1_642:
        vmovdqa64       xmm29,XMMWORD[SHUF_MASK]
        vpaddd  xmm0,xmm2,XMMWORD[ONE]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,0
        vpshufb xmm0,xmm0,xmm29
        vmovdqu8        xmm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     xmm0,xmm0,xmm15
        vpxorq  xmm0,xmm0,xmm6
        vextracti32x4   xmm12,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb xmm6,xmm6,xmm29
        vextracti32x4   xmm13,zmm6,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_643





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm6,xmm20,0x01
        vpclmulqdq      xmm5,xmm6,xmm20,0x10
        vpclmulqdq      xmm0,xmm6,xmm20,0x11
        vpclmulqdq      xmm3,xmm6,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_643
$L$_small_initial_partial_block_643:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12











        vpxorq  xmm14,xmm14,xmm13

        jmp     NEAR $L$_after_reduction_643
$L$_small_initial_compute_done_643:
$L$_after_reduction_643:
        jmp     NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_2_642:
        vmovdqa64       ymm29,YMMWORD[SHUF_MASK]
        vshufi64x2      ymm0,ymm2,ymm2,0
        vpaddd  ymm0,ymm0,YMMWORD[ddq_add_1234]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,1
        vpshufb ymm0,ymm0,ymm29
        vmovdqu8        ymm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     ymm0,ymm0,ymm15
        vpxorq  ymm0,ymm0,ymm6
        vextracti32x4   xmm12,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb ymm6,ymm6,ymm29
        vextracti32x4   xmm13,zmm6,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_644





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm6,ymm20,0x01
        vpclmulqdq      ymm5,ymm6,ymm20,0x10
        vpclmulqdq      ymm0,ymm6,ymm20,0x11
        vpclmulqdq      ymm3,ymm6,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_644
$L$_small_initial_partial_block_644:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm6,xmm20,0x01
        vpclmulqdq      xmm5,xmm6,xmm20,0x10
        vpclmulqdq      xmm0,xmm6,xmm20,0x11
        vpclmulqdq      xmm3,xmm6,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_644:

        or      r13,r13
        je      NEAR $L$_after_reduction_644
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_644:
        jmp     NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_3_642:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,2
        vpshufb zmm0,zmm0,zmm29
        vmovdqu8        zmm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vextracti32x4   xmm12,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm6,zmm6,zmm29
        vextracti32x4   xmm13,zmm6,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_645





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_645
$L$_small_initial_partial_block_645:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm6,ymm20,0x01
        vpclmulqdq      ymm5,ymm6,ymm20,0x10
        vpclmulqdq      ymm0,ymm6,ymm20,0x11
        vpclmulqdq      ymm3,ymm6,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_645:

        or      r13,r13
        je      NEAR $L$_after_reduction_645
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_645:
        jmp     NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_4_642:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,3
        vpshufb zmm0,zmm0,zmm29
        vmovdqu8        zmm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vextracti32x4   xmm12,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm6,zmm6,zmm29
        vextracti32x4   xmm13,zmm6,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_646





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_646
$L$_small_initial_partial_block_646:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_646:

        or      r13,r13
        je      NEAR $L$_after_reduction_646
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_646:
        jmp     NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_5_642:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,0
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     xmm3,xmm3,xmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  xmm3,xmm3,xmm7
        vextracti32x4   xmm12,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm6,zmm29
        vpshufb xmm7,xmm7,xmm29
        vextracti32x4   xmm13,zmm7,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_647





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm7,xmm20,0x01
        vpclmulqdq      xmm5,xmm7,xmm20,0x10
        vpclmulqdq      xmm0,xmm7,xmm20,0x11
        vpclmulqdq      xmm3,xmm7,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_647
$L$_small_initial_partial_block_647:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_647:

        or      r13,r13
        je      NEAR $L$_after_reduction_647
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_647:
        jmp     NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_6_642:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,1
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     ymm3,ymm3,ymm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  ymm3,ymm3,ymm7
        vextracti32x4   xmm12,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm6,zmm29
        vpshufb ymm7,ymm7,ymm29
        vextracti32x4   xmm13,zmm7,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_648





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm7,ymm20,0x01
        vpclmulqdq      ymm5,ymm7,ymm20,0x10
        vpclmulqdq      ymm0,ymm7,ymm20,0x11
        vpclmulqdq      ymm3,ymm7,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_648
$L$_small_initial_partial_block_648:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm7,xmm20,0x01
        vpclmulqdq      xmm5,xmm7,xmm20,0x10
        vpclmulqdq      xmm0,xmm7,xmm20,0x11
        vpclmulqdq      xmm3,xmm7,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_648:

        or      r13,r13
        je      NEAR $L$_after_reduction_648
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_648:
        jmp     NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_7_642:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,2
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vextracti32x4   xmm12,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vextracti32x4   xmm13,zmm7,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_649





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm7,zmm20,0x01
        vpclmulqdq      zmm5,zmm7,zmm20,0x10
        vpclmulqdq      zmm0,zmm7,zmm20,0x11
        vpclmulqdq      zmm3,zmm7,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_649
$L$_small_initial_partial_block_649:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm7,ymm20,0x01
        vpclmulqdq      ymm5,ymm7,ymm20,0x10
        vpclmulqdq      ymm0,ymm7,ymm20,0x11
        vpclmulqdq      ymm3,ymm7,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_649:

        or      r13,r13
        je      NEAR $L$_after_reduction_649
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_649:
        jmp     NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_8_642:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,3
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vextracti32x4   xmm12,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vextracti32x4   xmm13,zmm7,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_650





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_650
$L$_small_initial_partial_block_650:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm7,zmm20,0x01
        vpclmulqdq      zmm5,zmm7,zmm20,0x10
        vpclmulqdq      zmm0,zmm7,zmm20,0x11
        vpclmulqdq      zmm3,zmm7,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_650:

        or      r13,r13
        je      NEAR $L$_after_reduction_650
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_650:
        jmp     NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_9_642:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,0
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     xmm4,xmm4,xmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  xmm4,xmm4,xmm10
        vextracti32x4   xmm12,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb xmm10,xmm10,xmm29
        vextracti32x4   xmm13,zmm10,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_651





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm10,xmm20,0x01
        vpclmulqdq      xmm5,xmm10,xmm20,0x10
        vpclmulqdq      xmm0,xmm10,xmm20,0x11
        vpclmulqdq      xmm3,xmm10,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_651
$L$_small_initial_partial_block_651:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_651:

        or      r13,r13
        je      NEAR $L$_after_reduction_651
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_651:
        jmp     NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_10_642:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,1
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     ymm4,ymm4,ymm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  ymm4,ymm4,ymm10
        vextracti32x4   xmm12,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb ymm10,ymm10,ymm29
        vextracti32x4   xmm13,zmm10,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_652





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm10,ymm20,0x01
        vpclmulqdq      ymm5,ymm10,ymm20,0x10
        vpclmulqdq      ymm0,ymm10,ymm20,0x11
        vpclmulqdq      ymm3,ymm10,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_652
$L$_small_initial_partial_block_652:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm10,xmm20,0x01
        vpclmulqdq      xmm5,xmm10,xmm20,0x10
        vpclmulqdq      xmm0,xmm10,xmm20,0x11
        vpclmulqdq      xmm3,xmm10,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_652:

        or      r13,r13
        je      NEAR $L$_after_reduction_652
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_652:
        jmp     NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_11_642:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,2
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vextracti32x4   xmm12,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vextracti32x4   xmm13,zmm10,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_653





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm10,zmm20,0x01
        vpclmulqdq      zmm5,zmm10,zmm20,0x10
        vpclmulqdq      zmm0,zmm10,zmm20,0x11
        vpclmulqdq      zmm3,zmm10,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_653
$L$_small_initial_partial_block_653:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm10,ymm20,0x01
        vpclmulqdq      ymm5,ymm10,ymm20,0x10
        vpclmulqdq      ymm0,ymm10,ymm20,0x11
        vpclmulqdq      ymm3,ymm10,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_653:

        or      r13,r13
        je      NEAR $L$_after_reduction_653
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_653:
        jmp     NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_12_642:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,3
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vextracti32x4   xmm12,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vextracti32x4   xmm13,zmm10,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_654





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_654
$L$_small_initial_partial_block_654:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm10,zmm20,0x01
        vpclmulqdq      zmm5,zmm10,zmm20,0x10
        vpclmulqdq      zmm0,zmm10,zmm20,0x11
        vpclmulqdq      zmm3,zmm10,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_654:

        or      r13,r13
        je      NEAR $L$_after_reduction_654
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_654:
        jmp     NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_13_642:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,0
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     xmm5,xmm5,xmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  xmm5,xmm5,xmm11
        vextracti32x4   xmm12,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb xmm11,xmm11,xmm29
        vextracti32x4   xmm13,zmm11,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_655





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm11,xmm20,0x01
        vpclmulqdq      xmm5,xmm11,xmm20,0x10
        vpclmulqdq      xmm0,xmm11,xmm20,0x11
        vpclmulqdq      xmm3,xmm11,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_655
$L$_small_initial_partial_block_655:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_655:

        or      r13,r13
        je      NEAR $L$_after_reduction_655
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_655:
        jmp     NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_14_642:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,1
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     ymm5,ymm5,ymm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  ymm5,ymm5,ymm11
        vextracti32x4   xmm12,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb ymm11,ymm11,ymm29
        vextracti32x4   xmm13,zmm11,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_656





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm11,ymm20,0x01
        vpclmulqdq      ymm5,ymm11,ymm20,0x10
        vpclmulqdq      ymm0,ymm11,ymm20,0x11
        vpclmulqdq      ymm3,ymm11,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_656
$L$_small_initial_partial_block_656:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm11,xmm20,0x01
        vpclmulqdq      xmm5,xmm11,xmm20,0x10
        vpclmulqdq      xmm0,xmm11,xmm20,0x11
        vpclmulqdq      xmm3,xmm11,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_656:

        or      r13,r13
        je      NEAR $L$_after_reduction_656
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_656:
        jmp     NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_15_642:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,2
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     zmm5,zmm5,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  zmm5,zmm5,zmm11
        vextracti32x4   xmm12,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vextracti32x4   xmm13,zmm11,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_657





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm11,zmm20,0x01
        vpclmulqdq      zmm5,zmm11,zmm20,0x10
        vpclmulqdq      zmm0,zmm11,zmm20,0x11
        vpclmulqdq      zmm3,zmm11,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_657
$L$_small_initial_partial_block_657:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm11,ymm20,0x01
        vpclmulqdq      ymm5,ymm11,ymm20,0x10
        vpclmulqdq      ymm0,ymm11,ymm20,0x11
        vpclmulqdq      ymm3,ymm11,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_657:

        or      r13,r13
        je      NEAR $L$_after_reduction_657
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_657:
        jmp     NEAR $L$_small_initial_blocks_encrypted_642
$L$_small_initial_num_blocks_is_16_642:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,3
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     zmm5,zmm5,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  zmm5,zmm5,zmm11
        vextracti32x4   xmm12,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vextracti32x4   xmm13,zmm11,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_658:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm11,zmm20,0x01
        vpclmulqdq      zmm5,zmm11,zmm20,0x10
        vpclmulqdq      zmm0,zmm11,zmm20,0x11
        vpclmulqdq      zmm3,zmm11,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_658:
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_658:
$L$_small_initial_blocks_encrypted_642:
$L$_ghash_done_497:
        vmovdqu64       XMMWORD[rdx],xmm2
        vmovdqu64       XMMWORD[64+rdx],xmm14
$L$_enc_dec_done_497:
        jmp     NEAR $L$exit_gcm_decrypt
ALIGN   32
$L$aes_gcm_decrypt_192_avx512:
        cmp     QWORD[112+rbp],0
        je      NEAR $L$_enc_dec_done_659
        xor     r14,r14
        vmovdqu64       xmm14,XMMWORD[64+rdx]

        mov     r11,QWORD[r8]
        or      r11,r11
        je      NEAR $L$_partial_block_done_660
        mov     r10d,16
        lea     r12,[byte_len_to_mask_table]
        cmp     QWORD[112+rbp],r10
        cmovc   r10,QWORD[112+rbp]
        add     r12,r10
        add     r12,r10
        kmovw   k1,[r12]
        vmovdqu8        xmm0{k1}{z},[r9]

        vmovdqu64       xmm3,XMMWORD[16+rdx]
        vmovdqu64       xmm4,XMMWORD[336+rdx]



        lea     r12,[SHIFT_MASK]
        add     r12,r11
        vmovdqu64       xmm5,XMMWORD[r12]
        vpshufb xmm3,xmm3,xmm5

        vmovdqa64       xmm6,xmm0
        vpxorq  xmm3,xmm3,xmm0


        mov     r13,QWORD[112+rbp]
        add     r13,r11
        sub     r13,16
        jge     NEAR $L$_no_extra_mask_660
        sub     r12,r13
$L$_no_extra_mask_660:



        vmovdqu64       xmm0,XMMWORD[16+r12]
        vpand   xmm3,xmm3,xmm0
        vpand   xmm6,xmm6,xmm0
        vpshufb xmm6,xmm6,XMMWORD[SHUF_MASK]
        vpshufb xmm6,xmm6,xmm5
        vpxorq  xmm14,xmm14,xmm6
        cmp     r13,0
        jl      NEAR $L$_partial_incomplete_660

        vpclmulqdq      xmm7,xmm14,xmm4,0x11
        vpclmulqdq      xmm10,xmm14,xmm4,0x00
        vpclmulqdq      xmm11,xmm14,xmm4,0x01
        vpclmulqdq      xmm14,xmm14,xmm4,0x10
        vpxorq  xmm14,xmm14,xmm11

        vpsrldq xmm11,xmm14,8
        vpslldq xmm14,xmm14,8
        vpxorq  xmm7,xmm7,xmm11
        vpxorq  xmm14,xmm14,xmm10



        vmovdqu64       xmm11,XMMWORD[POLY2]

        vpclmulqdq      xmm10,xmm11,xmm14,0x01
        vpslldq xmm10,xmm10,8
        vpxorq  xmm14,xmm14,xmm10



        vpclmulqdq      xmm10,xmm11,xmm14,0x00
        vpsrldq xmm10,xmm10,4
        vpclmulqdq      xmm14,xmm11,xmm14,0x10
        vpslldq xmm14,xmm14,4

        vpternlogq      xmm14,xmm7,xmm10,0x96

        mov     QWORD[r8],0

        mov     r12,r11
        mov     r11,16
        sub     r11,r12
        jmp     NEAR $L$_enc_dec_done_660

$L$_partial_incomplete_660:
        mov     r12,QWORD[112+rbp]
        add     QWORD[r8],r12
        mov     r11,QWORD[112+rbp]

$L$_enc_dec_done_660:


        lea     r12,[byte_len_to_mask_table]
        kmovw   k1,[r11*2+r12]
        vmovdqu64       XMMWORD[64+rdx],xmm14
        mov     r12,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r12]{k1},xmm3
$L$_partial_block_done_660:
        vmovdqu64       xmm2,XMMWORD[rdx]
        mov     r13,QWORD[112+rbp]
        sub     r13,r11
        je      NEAR $L$_enc_dec_done_659
        cmp     r13,256
        jbe     NEAR $L$_message_below_equal_16_blocks_659

        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vmovdqa64       zmm27,ZMMWORD[ddq_addbe_4444]
        vmovdqa64       zmm28,ZMMWORD[ddq_addbe_1234]






        vmovd   r15d,xmm2
        and     r15d,255

        vshufi64x2      zmm2,zmm2,zmm2,0
        vpshufb zmm2,zmm2,zmm29



        cmp     r15b,240
        jae     NEAR $L$_next_16_overflow_661
        vpaddd  zmm7,zmm2,zmm28
        vpaddd  zmm10,zmm7,zmm27
        vpaddd  zmm11,zmm10,zmm27
        vpaddd  zmm12,zmm11,zmm27
        jmp     NEAR $L$_next_16_ok_661
$L$_next_16_overflow_661:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm12,ZMMWORD[ddq_add_4444]
        vpaddd  zmm7,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm10,zmm7,zmm12
        vpaddd  zmm11,zmm10,zmm12
        vpaddd  zmm12,zmm11,zmm12
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vpshufb zmm12,zmm12,zmm29
$L$_next_16_ok_661:
        vshufi64x2      zmm2,zmm12,zmm12,255
        add     r15b,16

        vmovdqu8        zmm0,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm3,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm4,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm5,ZMMWORD[192+r11*1+r9]


        vbroadcastf64x2 zmm6,ZMMWORD[rcx]
        vpxorq  zmm7,zmm7,zmm6
        vpxorq  zmm10,zmm10,zmm6
        vpxorq  zmm11,zmm11,zmm6
        vpxorq  zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[16+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[32+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[48+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[64+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[80+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[96+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[112+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[128+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[144+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[160+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[176+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[192+rcx]
        vaesenclast     zmm7,zmm7,zmm6
        vaesenclast     zmm10,zmm10,zmm6
        vaesenclast     zmm11,zmm11,zmm6
        vaesenclast     zmm12,zmm12,zmm6


        vpxorq  zmm7,zmm7,zmm0
        vpxorq  zmm10,zmm10,zmm3
        vpxorq  zmm11,zmm11,zmm4
        vpxorq  zmm12,zmm12,zmm5


        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm7
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm10
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm11
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm12

        vpshufb zmm7,zmm0,zmm29
        vpshufb zmm10,zmm3,zmm29
        vpshufb zmm11,zmm4,zmm29
        vpshufb zmm12,zmm5,zmm29
        vmovdqa64       ZMMWORD[768+rsp],zmm7
        vmovdqa64       ZMMWORD[832+rsp],zmm10
        vmovdqa64       ZMMWORD[896+rsp],zmm11
        vmovdqa64       ZMMWORD[960+rsp],zmm12
        test    r14,r14
        jnz     NEAR $L$_skip_hkeys_precomputation_662

        vmovdqu64       zmm0,ZMMWORD[288+rdx]
        vmovdqu64       ZMMWORD[704+rsp],zmm0

        vmovdqu64       zmm3,ZMMWORD[224+rdx]
        vmovdqu64       ZMMWORD[640+rsp],zmm3


        vshufi64x2      zmm3,zmm3,zmm3,0x00

        vmovdqu64       zmm4,ZMMWORD[160+rdx]
        vmovdqu64       ZMMWORD[576+rsp],zmm4

        vmovdqu64       zmm5,ZMMWORD[96+rdx]
        vmovdqu64       ZMMWORD[512+rsp],zmm5
$L$_skip_hkeys_precomputation_662:
        cmp     r13,512
        jb      NEAR $L$_message_below_32_blocks_659



        cmp     r15b,240
        jae     NEAR $L$_next_16_overflow_663
        vpaddd  zmm7,zmm2,zmm28
        vpaddd  zmm10,zmm7,zmm27
        vpaddd  zmm11,zmm10,zmm27
        vpaddd  zmm12,zmm11,zmm27
        jmp     NEAR $L$_next_16_ok_663
$L$_next_16_overflow_663:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm12,ZMMWORD[ddq_add_4444]
        vpaddd  zmm7,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm10,zmm7,zmm12
        vpaddd  zmm11,zmm10,zmm12
        vpaddd  zmm12,zmm11,zmm12
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vpshufb zmm12,zmm12,zmm29
$L$_next_16_ok_663:
        vshufi64x2      zmm2,zmm12,zmm12,255
        add     r15b,16

        vmovdqu8        zmm0,ZMMWORD[256+r11*1+r9]
        vmovdqu8        zmm3,ZMMWORD[320+r11*1+r9]
        vmovdqu8        zmm4,ZMMWORD[384+r11*1+r9]
        vmovdqu8        zmm5,ZMMWORD[448+r11*1+r9]


        vbroadcastf64x2 zmm6,ZMMWORD[rcx]
        vpxorq  zmm7,zmm7,zmm6
        vpxorq  zmm10,zmm10,zmm6
        vpxorq  zmm11,zmm11,zmm6
        vpxorq  zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[16+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[32+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[48+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[64+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[80+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[96+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[112+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[128+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[144+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[160+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[176+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[192+rcx]
        vaesenclast     zmm7,zmm7,zmm6
        vaesenclast     zmm10,zmm10,zmm6
        vaesenclast     zmm11,zmm11,zmm6
        vaesenclast     zmm12,zmm12,zmm6


        vpxorq  zmm7,zmm7,zmm0
        vpxorq  zmm10,zmm10,zmm3
        vpxorq  zmm11,zmm11,zmm4
        vpxorq  zmm12,zmm12,zmm5


        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[256+r11*1+r10],zmm7
        vmovdqu8        ZMMWORD[320+r11*1+r10],zmm10
        vmovdqu8        ZMMWORD[384+r11*1+r10],zmm11
        vmovdqu8        ZMMWORD[448+r11*1+r10],zmm12

        vpshufb zmm7,zmm0,zmm29
        vpshufb zmm10,zmm3,zmm29
        vpshufb zmm11,zmm4,zmm29
        vpshufb zmm12,zmm5,zmm29
        vmovdqa64       ZMMWORD[1024+rsp],zmm7
        vmovdqa64       ZMMWORD[1088+rsp],zmm10
        vmovdqa64       ZMMWORD[1152+rsp],zmm11
        vmovdqa64       ZMMWORD[1216+rsp],zmm12
        test    r14,r14
        jnz     NEAR $L$_skip_hkeys_precomputation_664
        vmovdqu64       zmm3,ZMMWORD[640+rsp]


        vshufi64x2      zmm3,zmm3,zmm3,0x00

        vmovdqu64       zmm4,ZMMWORD[576+rsp]
        vmovdqu64       zmm5,ZMMWORD[512+rsp]

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[448+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[384+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[320+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[256+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[192+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[128+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[64+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[rsp],zmm5
$L$_skip_hkeys_precomputation_664:
        mov     r14,1
        add     r11,512
        sub     r13,512

        cmp     r13,768
        jb      NEAR $L$_no_more_big_nblocks_659
$L$_encrypt_big_nblocks_659:
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_665
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_665
$L$_16_blocks_overflow_665:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_665:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[192+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm26,zmm10,zmm15
        vpxorq  zmm24,zmm6,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm5
        vpshufb zmm0,zmm17,zmm29
        vpshufb zmm3,zmm19,zmm29
        vpshufb zmm4,zmm20,zmm29
        vpshufb zmm5,zmm21,zmm29
        vmovdqa64       ZMMWORD[1280+rsp],zmm0
        vmovdqa64       ZMMWORD[1344+rsp],zmm3
        vmovdqa64       ZMMWORD[1408+rsp],zmm4
        vmovdqa64       ZMMWORD[1472+rsp],zmm5
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_666
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_666
$L$_16_blocks_overflow_666:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_666:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[256+rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[320+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[384+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[448+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[256+r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[320+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[384+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[448+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vpternlogq      zmm24,zmm6,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[256+r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[320+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[384+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[448+r11*1+r10],zmm5
        vpshufb zmm0,zmm17,zmm29
        vpshufb zmm3,zmm19,zmm29
        vpshufb zmm4,zmm20,zmm29
        vpshufb zmm5,zmm21,zmm29
        vmovdqa64       ZMMWORD[768+rsp],zmm0
        vmovdqa64       ZMMWORD[832+rsp],zmm3
        vmovdqa64       ZMMWORD[896+rsp],zmm4
        vmovdqa64       ZMMWORD[960+rsp],zmm5
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_667
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_667
$L$_16_blocks_overflow_667:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_667:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[512+r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[576+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[640+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[704+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]


        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96

        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpternlogq      zmm6,zmm12,zmm15,0x96
        vpxorq  zmm6,zmm6,zmm24
        vpternlogq      zmm7,zmm13,zmm10,0x96
        vpxorq  zmm7,zmm7,zmm25
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vextracti64x4   ymm12,zmm6,1
        vpxorq  ymm6,ymm6,ymm12
        vextracti32x4   xmm12,ymm6,1
        vpxorq  xmm6,xmm6,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm6,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[512+r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[576+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[640+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[704+r11*1+r10],zmm5
        vpshufb zmm0,zmm17,zmm29
        vpshufb zmm3,zmm19,zmm29
        vpshufb zmm4,zmm20,zmm29
        vpshufb zmm5,zmm21,zmm29
        vmovdqa64       ZMMWORD[1024+rsp],zmm0
        vmovdqa64       ZMMWORD[1088+rsp],zmm3
        vmovdqa64       ZMMWORD[1152+rsp],zmm4
        vmovdqa64       ZMMWORD[1216+rsp],zmm5
        vmovdqa64       zmm14,zmm6

        add     r11,768
        sub     r13,768
        cmp     r13,768
        jae     NEAR $L$_encrypt_big_nblocks_659

$L$_no_more_big_nblocks_659:

        cmp     r13,512
        jae     NEAR $L$_encrypt_32_blocks_659

        cmp     r13,256
        jae     NEAR $L$_encrypt_16_blocks_659
$L$_encrypt_0_blocks_ghash_32_659:
        mov     r10d,r13d
        and     r10d,~15
        mov     ebx,256
        sub     ebx,r10d
        vmovdqa64       zmm13,ZMMWORD[768+rsp]
        vpxorq  zmm13,zmm13,zmm14
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[832+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpxorq  zmm26,zmm4,zmm10
        vpxorq  zmm24,zmm0,zmm6
        vpxorq  zmm25,zmm3,zmm7
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[896+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[960+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        add     ebx,256
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_668

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_668
        jb      NEAR $L$_last_num_blocks_is_7_1_668


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_668
        jb      NEAR $L$_last_num_blocks_is_11_9_668


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_668
        ja      NEAR $L$_last_num_blocks_is_16_668
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_668
        jmp     NEAR $L$_last_num_blocks_is_13_668

$L$_last_num_blocks_is_11_9_668:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_668
        ja      NEAR $L$_last_num_blocks_is_11_668
        jmp     NEAR $L$_last_num_blocks_is_9_668

$L$_last_num_blocks_is_7_1_668:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_668
        jb      NEAR $L$_last_num_blocks_is_3_1_668

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_668
        je      NEAR $L$_last_num_blocks_is_6_668
        jmp     NEAR $L$_last_num_blocks_is_5_668

$L$_last_num_blocks_is_3_1_668:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_668
        je      NEAR $L$_last_num_blocks_is_2_668
$L$_last_num_blocks_is_1_668:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_669
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_669

$L$_16_blocks_overflow_669:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_669:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc xmm0,xmm0,xmm31
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb xmm17,xmm17,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_670





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_670
$L$_small_initial_partial_block_670:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11


        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm0,XMMWORD[POLY2]


        vpclmulqdq      xmm3,xmm0,xmm25,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm3,xmm25,xmm3


        vpclmulqdq      xmm4,xmm0,xmm3,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm14,xmm0,xmm3,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm4,xmm24,0x96












        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_670
$L$_small_initial_compute_done_670:
$L$_after_reduction_670:
        jmp     NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_2_668:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_671
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_671

$L$_16_blocks_overflow_671:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_671:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc ymm0,ymm0,ymm31
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb ymm17,ymm17,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_672





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_672
$L$_small_initial_partial_block_672:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_672:

        or      r13,r13
        je      NEAR $L$_after_reduction_672
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_672:
        jmp     NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_3_668:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_673
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_673

$L$_16_blocks_overflow_673:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_673:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_674





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_674
$L$_small_initial_partial_block_674:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_674:

        or      r13,r13
        je      NEAR $L$_after_reduction_674
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_674:
        jmp     NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_4_668:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_675
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_675

$L$_16_blocks_overflow_675:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_675:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_676





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_676
$L$_small_initial_partial_block_676:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_676:

        or      r13,r13
        je      NEAR $L$_after_reduction_676
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_676:
        jmp     NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_5_668:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_677
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_677

$L$_16_blocks_overflow_677:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_677:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb xmm19,xmm19,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_678





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_678
$L$_small_initial_partial_block_678:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_678:

        or      r13,r13
        je      NEAR $L$_after_reduction_678
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_678:
        jmp     NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_6_668:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_679
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_679

$L$_16_blocks_overflow_679:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_679:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb ymm19,ymm19,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_680





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_680
$L$_small_initial_partial_block_680:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_680:

        or      r13,r13
        je      NEAR $L$_after_reduction_680
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_680:
        jmp     NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_7_668:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_681
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_681

$L$_16_blocks_overflow_681:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_681:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_682





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_682
$L$_small_initial_partial_block_682:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_682:

        or      r13,r13
        je      NEAR $L$_after_reduction_682
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_682:
        jmp     NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_8_668:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_683
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_683

$L$_16_blocks_overflow_683:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_683:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_684





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_684
$L$_small_initial_partial_block_684:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_684:

        or      r13,r13
        je      NEAR $L$_after_reduction_684
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_684:
        jmp     NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_9_668:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_685
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_685

$L$_16_blocks_overflow_685:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_685:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb xmm20,xmm20,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_686





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_686
$L$_small_initial_partial_block_686:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_686:

        or      r13,r13
        je      NEAR $L$_after_reduction_686
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_686:
        jmp     NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_10_668:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_687
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_687

$L$_16_blocks_overflow_687:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_687:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb ymm20,ymm20,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_688





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_688
$L$_small_initial_partial_block_688:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_688:

        or      r13,r13
        je      NEAR $L$_after_reduction_688
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_688:
        jmp     NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_11_668:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_689
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_689

$L$_16_blocks_overflow_689:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_689:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_690





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_690
$L$_small_initial_partial_block_690:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_690:

        or      r13,r13
        je      NEAR $L$_after_reduction_690
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_690:
        jmp     NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_12_668:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_691
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_691

$L$_16_blocks_overflow_691:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_691:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_692





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_692
$L$_small_initial_partial_block_692:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_692:

        or      r13,r13
        je      NEAR $L$_after_reduction_692
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_692:
        jmp     NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_13_668:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_693
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_693

$L$_16_blocks_overflow_693:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_693:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb xmm21,xmm21,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_694





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_694
$L$_small_initial_partial_block_694:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_694:

        or      r13,r13
        je      NEAR $L$_after_reduction_694
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_694:
        jmp     NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_14_668:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_695
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_695

$L$_16_blocks_overflow_695:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_695:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb ymm21,ymm21,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_696





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_696
$L$_small_initial_partial_block_696:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_696:

        or      r13,r13
        je      NEAR $L$_after_reduction_696
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_696:
        jmp     NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_15_668:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_697
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_697

$L$_16_blocks_overflow_697:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_697:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_698





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_698
$L$_small_initial_partial_block_698:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_698:

        or      r13,r13
        je      NEAR $L$_after_reduction_698
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_698:
        jmp     NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_16_668:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_699
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_699

$L$_16_blocks_overflow_699:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_699:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_700:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_700:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_700:
        jmp     NEAR $L$_last_blocks_done_668
$L$_last_num_blocks_is_0_668:
        vmovdqa64       zmm13,ZMMWORD[1024+rsp]
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1088+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1152+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1216+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_668:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_659
$L$_encrypt_32_blocks_659:
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_701
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_701
$L$_16_blocks_overflow_701:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_701:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[192+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm26,zmm10,zmm15
        vpxorq  zmm24,zmm6,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm5
        vpshufb zmm0,zmm17,zmm29
        vpshufb zmm3,zmm19,zmm29
        vpshufb zmm4,zmm20,zmm29
        vpshufb zmm5,zmm21,zmm29
        vmovdqa64       ZMMWORD[1280+rsp],zmm0
        vmovdqa64       ZMMWORD[1344+rsp],zmm3
        vmovdqa64       ZMMWORD[1408+rsp],zmm4
        vmovdqa64       ZMMWORD[1472+rsp],zmm5
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_702
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_702
$L$_16_blocks_overflow_702:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_702:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[256+rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[320+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[384+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[448+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[256+r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[320+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[384+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[448+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vpternlogq      zmm24,zmm6,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[256+r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[320+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[384+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[448+r11*1+r10],zmm5
        vpshufb zmm0,zmm17,zmm29
        vpshufb zmm3,zmm19,zmm29
        vpshufb zmm4,zmm20,zmm29
        vpshufb zmm5,zmm21,zmm29
        vmovdqa64       ZMMWORD[768+rsp],zmm0
        vmovdqa64       ZMMWORD[832+rsp],zmm3
        vmovdqa64       ZMMWORD[896+rsp],zmm4
        vmovdqa64       ZMMWORD[960+rsp],zmm5
        vmovdqa64       zmm13,ZMMWORD[1280+rsp]
        vmovdqu64       zmm12,ZMMWORD[512+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1344+rsp]
        vmovdqu64       zmm12,ZMMWORD[576+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1408+rsp]
        vmovdqu64       zmm12,ZMMWORD[640+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1472+rsp]
        vmovdqu64       zmm12,ZMMWORD[704+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

        sub     r13,512
        add     r11,512
        mov     r10d,r13d
        and     r10d,~15
        mov     ebx,512
        sub     ebx,r10d
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_703

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_703
        jb      NEAR $L$_last_num_blocks_is_7_1_703


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_703
        jb      NEAR $L$_last_num_blocks_is_11_9_703


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_703
        ja      NEAR $L$_last_num_blocks_is_16_703
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_703
        jmp     NEAR $L$_last_num_blocks_is_13_703

$L$_last_num_blocks_is_11_9_703:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_703
        ja      NEAR $L$_last_num_blocks_is_11_703
        jmp     NEAR $L$_last_num_blocks_is_9_703

$L$_last_num_blocks_is_7_1_703:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_703
        jb      NEAR $L$_last_num_blocks_is_3_1_703

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_703
        je      NEAR $L$_last_num_blocks_is_6_703
        jmp     NEAR $L$_last_num_blocks_is_5_703

$L$_last_num_blocks_is_3_1_703:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_703
        je      NEAR $L$_last_num_blocks_is_2_703
$L$_last_num_blocks_is_1_703:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_704
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_704

$L$_16_blocks_overflow_704:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_704:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc xmm0,xmm0,xmm31
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb xmm17,xmm17,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_705





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_705
$L$_small_initial_partial_block_705:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11


        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm0,XMMWORD[POLY2]


        vpclmulqdq      xmm3,xmm0,xmm25,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm3,xmm25,xmm3


        vpclmulqdq      xmm4,xmm0,xmm3,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm14,xmm0,xmm3,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm4,xmm24,0x96












        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_705
$L$_small_initial_compute_done_705:
$L$_after_reduction_705:
        jmp     NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_2_703:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_706
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_706

$L$_16_blocks_overflow_706:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_706:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc ymm0,ymm0,ymm31
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb ymm17,ymm17,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_707





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_707
$L$_small_initial_partial_block_707:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_707:

        or      r13,r13
        je      NEAR $L$_after_reduction_707
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_707:
        jmp     NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_3_703:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_708
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_708

$L$_16_blocks_overflow_708:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_708:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_709





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_709
$L$_small_initial_partial_block_709:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_709:

        or      r13,r13
        je      NEAR $L$_after_reduction_709
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_709:
        jmp     NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_4_703:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_710
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_710

$L$_16_blocks_overflow_710:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_710:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_711





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_711
$L$_small_initial_partial_block_711:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_711:

        or      r13,r13
        je      NEAR $L$_after_reduction_711
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_711:
        jmp     NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_5_703:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_712
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_712

$L$_16_blocks_overflow_712:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_712:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb xmm19,xmm19,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_713





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_713
$L$_small_initial_partial_block_713:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_713:

        or      r13,r13
        je      NEAR $L$_after_reduction_713
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_713:
        jmp     NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_6_703:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_714
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_714

$L$_16_blocks_overflow_714:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_714:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb ymm19,ymm19,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_715





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_715
$L$_small_initial_partial_block_715:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_715:

        or      r13,r13
        je      NEAR $L$_after_reduction_715
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_715:
        jmp     NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_7_703:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_716
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_716

$L$_16_blocks_overflow_716:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_716:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_717





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_717
$L$_small_initial_partial_block_717:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_717:

        or      r13,r13
        je      NEAR $L$_after_reduction_717
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_717:
        jmp     NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_8_703:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_718
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_718

$L$_16_blocks_overflow_718:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_718:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_719





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_719
$L$_small_initial_partial_block_719:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_719:

        or      r13,r13
        je      NEAR $L$_after_reduction_719
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_719:
        jmp     NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_9_703:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_720
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_720

$L$_16_blocks_overflow_720:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_720:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb xmm20,xmm20,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_721





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_721
$L$_small_initial_partial_block_721:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_721:

        or      r13,r13
        je      NEAR $L$_after_reduction_721
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_721:
        jmp     NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_10_703:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_722
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_722

$L$_16_blocks_overflow_722:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_722:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb ymm20,ymm20,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_723





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_723
$L$_small_initial_partial_block_723:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_723:

        or      r13,r13
        je      NEAR $L$_after_reduction_723
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_723:
        jmp     NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_11_703:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_724
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_724

$L$_16_blocks_overflow_724:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_724:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_725





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_725
$L$_small_initial_partial_block_725:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_725:

        or      r13,r13
        je      NEAR $L$_after_reduction_725
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_725:
        jmp     NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_12_703:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_726
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_726

$L$_16_blocks_overflow_726:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_726:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_727





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_727
$L$_small_initial_partial_block_727:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_727:

        or      r13,r13
        je      NEAR $L$_after_reduction_727
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_727:
        jmp     NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_13_703:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_728
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_728

$L$_16_blocks_overflow_728:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_728:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb xmm21,xmm21,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_729





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_729
$L$_small_initial_partial_block_729:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_729:

        or      r13,r13
        je      NEAR $L$_after_reduction_729
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_729:
        jmp     NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_14_703:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_730
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_730

$L$_16_blocks_overflow_730:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_730:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb ymm21,ymm21,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_731





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_731
$L$_small_initial_partial_block_731:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_731:

        or      r13,r13
        je      NEAR $L$_after_reduction_731
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_731:
        jmp     NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_15_703:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_732
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_732

$L$_16_blocks_overflow_732:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_732:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_733





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_733
$L$_small_initial_partial_block_733:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_733:

        or      r13,r13
        je      NEAR $L$_after_reduction_733
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_733:
        jmp     NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_16_703:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_734
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_734

$L$_16_blocks_overflow_734:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_734:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_735:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_735:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_735:
        jmp     NEAR $L$_last_blocks_done_703
$L$_last_num_blocks_is_0_703:
        vmovdqa64       zmm13,ZMMWORD[768+rsp]
        vpxorq  zmm13,zmm13,zmm14
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[832+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpxorq  zmm26,zmm4,zmm10
        vpxorq  zmm24,zmm0,zmm6
        vpxorq  zmm25,zmm3,zmm7
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[896+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[960+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_703:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_659
$L$_encrypt_16_blocks_659:
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_736
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_736
$L$_16_blocks_overflow_736:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_736:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[192+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm26,zmm10,zmm15
        vpxorq  zmm24,zmm6,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm5
        vpshufb zmm0,zmm17,zmm29
        vpshufb zmm3,zmm19,zmm29
        vpshufb zmm4,zmm20,zmm29
        vpshufb zmm5,zmm21,zmm29
        vmovdqa64       ZMMWORD[1280+rsp],zmm0
        vmovdqa64       ZMMWORD[1344+rsp],zmm3
        vmovdqa64       ZMMWORD[1408+rsp],zmm4
        vmovdqa64       ZMMWORD[1472+rsp],zmm5
        vmovdqa64       zmm13,ZMMWORD[1024+rsp]
        vmovdqu64       zmm12,ZMMWORD[256+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1088+rsp]
        vmovdqu64       zmm12,ZMMWORD[320+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1152+rsp]
        vmovdqu64       zmm12,ZMMWORD[384+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1216+rsp]
        vmovdqu64       zmm12,ZMMWORD[448+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        sub     r13,256
        add     r11,256
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_737

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_737
        jb      NEAR $L$_last_num_blocks_is_7_1_737


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_737
        jb      NEAR $L$_last_num_blocks_is_11_9_737


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_737
        ja      NEAR $L$_last_num_blocks_is_16_737
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_737
        jmp     NEAR $L$_last_num_blocks_is_13_737

$L$_last_num_blocks_is_11_9_737:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_737
        ja      NEAR $L$_last_num_blocks_is_11_737
        jmp     NEAR $L$_last_num_blocks_is_9_737

$L$_last_num_blocks_is_7_1_737:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_737
        jb      NEAR $L$_last_num_blocks_is_3_1_737

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_737
        je      NEAR $L$_last_num_blocks_is_6_737
        jmp     NEAR $L$_last_num_blocks_is_5_737

$L$_last_num_blocks_is_3_1_737:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_737
        je      NEAR $L$_last_num_blocks_is_2_737
$L$_last_num_blocks_is_1_737:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_738
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_738

$L$_16_blocks_overflow_738:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_738:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc xmm0,xmm0,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc xmm0,xmm0,xmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb xmm17,xmm17,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_739





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_739
$L$_small_initial_partial_block_739:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11











        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_739
$L$_small_initial_compute_done_739:
$L$_after_reduction_739:
        jmp     NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_2_737:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_740
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_740

$L$_16_blocks_overflow_740:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_740:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc ymm0,ymm0,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc ymm0,ymm0,ymm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb ymm17,ymm17,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_741





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_741
$L$_small_initial_partial_block_741:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_741:

        or      r13,r13
        je      NEAR $L$_after_reduction_741
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_741:
        jmp     NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_3_737:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_742
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_742

$L$_16_blocks_overflow_742:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_742:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_743





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_743
$L$_small_initial_partial_block_743:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_743:

        or      r13,r13
        je      NEAR $L$_after_reduction_743
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_743:
        jmp     NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_4_737:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_744
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_744

$L$_16_blocks_overflow_744:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_744:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_745





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_745
$L$_small_initial_partial_block_745:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_745:

        or      r13,r13
        je      NEAR $L$_after_reduction_745
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_745:
        jmp     NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_5_737:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_746
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_746

$L$_16_blocks_overflow_746:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_746:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb xmm19,xmm19,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_747





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_747
$L$_small_initial_partial_block_747:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_747:

        or      r13,r13
        je      NEAR $L$_after_reduction_747
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_747:
        jmp     NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_6_737:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_748
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_748

$L$_16_blocks_overflow_748:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_748:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb ymm19,ymm19,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_749





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_749
$L$_small_initial_partial_block_749:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_749:

        or      r13,r13
        je      NEAR $L$_after_reduction_749
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_749:
        jmp     NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_7_737:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_750
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_750

$L$_16_blocks_overflow_750:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_750:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_751





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_751
$L$_small_initial_partial_block_751:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_751:

        or      r13,r13
        je      NEAR $L$_after_reduction_751
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_751:
        jmp     NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_8_737:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_752
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_752

$L$_16_blocks_overflow_752:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_752:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_753





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_753
$L$_small_initial_partial_block_753:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_753:

        or      r13,r13
        je      NEAR $L$_after_reduction_753
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_753:
        jmp     NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_9_737:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_754
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_754

$L$_16_blocks_overflow_754:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_754:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb xmm20,xmm20,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_755





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_755
$L$_small_initial_partial_block_755:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_755:

        or      r13,r13
        je      NEAR $L$_after_reduction_755
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_755:
        jmp     NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_10_737:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_756
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_756

$L$_16_blocks_overflow_756:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_756:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb ymm20,ymm20,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_757





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_757
$L$_small_initial_partial_block_757:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_757:

        or      r13,r13
        je      NEAR $L$_after_reduction_757
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_757:
        jmp     NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_11_737:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_758
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_758

$L$_16_blocks_overflow_758:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_758:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_759





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_759
$L$_small_initial_partial_block_759:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_759:

        or      r13,r13
        je      NEAR $L$_after_reduction_759
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_759:
        jmp     NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_12_737:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_760
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_760

$L$_16_blocks_overflow_760:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_760:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_761





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_761
$L$_small_initial_partial_block_761:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_761:

        or      r13,r13
        je      NEAR $L$_after_reduction_761
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_761:
        jmp     NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_13_737:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_762
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_762

$L$_16_blocks_overflow_762:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_762:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb xmm21,xmm21,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_763





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_763
$L$_small_initial_partial_block_763:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_763:

        or      r13,r13
        je      NEAR $L$_after_reduction_763
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_763:
        jmp     NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_14_737:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_764
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_764

$L$_16_blocks_overflow_764:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_764:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb ymm21,ymm21,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_765





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_765
$L$_small_initial_partial_block_765:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_765:

        or      r13,r13
        je      NEAR $L$_after_reduction_765
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_765:
        jmp     NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_15_737:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_766
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_766

$L$_16_blocks_overflow_766:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_766:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_767





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_767
$L$_small_initial_partial_block_767:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_767:

        or      r13,r13
        je      NEAR $L$_after_reduction_767
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_767:
        jmp     NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_16_737:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_768
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_768

$L$_16_blocks_overflow_768:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_768:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_769:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_769:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_769:
        jmp     NEAR $L$_last_blocks_done_737
$L$_last_num_blocks_is_0_737:
        vmovdqa64       zmm13,ZMMWORD[1280+rsp]
        vmovdqu64       zmm12,ZMMWORD[512+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1344+rsp]
        vmovdqu64       zmm12,ZMMWORD[576+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1408+rsp]
        vmovdqu64       zmm12,ZMMWORD[640+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1472+rsp]
        vmovdqu64       zmm12,ZMMWORD[704+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_737:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_659

$L$_message_below_32_blocks_659:


        sub     r13,256
        add     r11,256
        mov     r10d,r13d
        test    r14,r14
        jnz     NEAR $L$_skip_hkeys_precomputation_770
        vmovdqu64       zmm3,ZMMWORD[640+rsp]


        vshufi64x2      zmm3,zmm3,zmm3,0x00

        vmovdqu64       zmm4,ZMMWORD[576+rsp]
        vmovdqu64       zmm5,ZMMWORD[512+rsp]

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[448+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[384+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[320+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[256+rsp],zmm5
$L$_skip_hkeys_precomputation_770:
        mov     r14,1
        and     r10d,~15
        mov     ebx,512
        sub     ebx,r10d
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_771

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_771
        jb      NEAR $L$_last_num_blocks_is_7_1_771


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_771
        jb      NEAR $L$_last_num_blocks_is_11_9_771


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_771
        ja      NEAR $L$_last_num_blocks_is_16_771
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_771
        jmp     NEAR $L$_last_num_blocks_is_13_771

$L$_last_num_blocks_is_11_9_771:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_771
        ja      NEAR $L$_last_num_blocks_is_11_771
        jmp     NEAR $L$_last_num_blocks_is_9_771

$L$_last_num_blocks_is_7_1_771:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_771
        jb      NEAR $L$_last_num_blocks_is_3_1_771

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_771
        je      NEAR $L$_last_num_blocks_is_6_771
        jmp     NEAR $L$_last_num_blocks_is_5_771

$L$_last_num_blocks_is_3_1_771:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_771
        je      NEAR $L$_last_num_blocks_is_2_771
$L$_last_num_blocks_is_1_771:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_772
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_772

$L$_16_blocks_overflow_772:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_772:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc xmm0,xmm0,xmm31
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb xmm17,xmm17,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_773





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_773
$L$_small_initial_partial_block_773:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11


        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm0,XMMWORD[POLY2]


        vpclmulqdq      xmm3,xmm0,xmm25,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm3,xmm25,xmm3


        vpclmulqdq      xmm4,xmm0,xmm3,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm14,xmm0,xmm3,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm4,xmm24,0x96












        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_773
$L$_small_initial_compute_done_773:
$L$_after_reduction_773:
        jmp     NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_2_771:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_774
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_774

$L$_16_blocks_overflow_774:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_774:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc ymm0,ymm0,ymm31
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb ymm17,ymm17,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_775





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_775
$L$_small_initial_partial_block_775:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_775:

        or      r13,r13
        je      NEAR $L$_after_reduction_775
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_775:
        jmp     NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_3_771:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_776
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_776

$L$_16_blocks_overflow_776:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_776:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_777





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_777
$L$_small_initial_partial_block_777:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_777:

        or      r13,r13
        je      NEAR $L$_after_reduction_777
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_777:
        jmp     NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_4_771:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_778
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_778

$L$_16_blocks_overflow_778:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_778:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_779





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_779
$L$_small_initial_partial_block_779:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_779:

        or      r13,r13
        je      NEAR $L$_after_reduction_779
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_779:
        jmp     NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_5_771:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_780
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_780

$L$_16_blocks_overflow_780:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_780:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb xmm19,xmm19,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_781





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_781
$L$_small_initial_partial_block_781:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_781:

        or      r13,r13
        je      NEAR $L$_after_reduction_781
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_781:
        jmp     NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_6_771:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_782
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_782

$L$_16_blocks_overflow_782:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_782:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb ymm19,ymm19,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_783





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_783
$L$_small_initial_partial_block_783:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_783:

        or      r13,r13
        je      NEAR $L$_after_reduction_783
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_783:
        jmp     NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_7_771:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_784
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_784

$L$_16_blocks_overflow_784:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_784:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_785





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_785
$L$_small_initial_partial_block_785:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_785:

        or      r13,r13
        je      NEAR $L$_after_reduction_785
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_785:
        jmp     NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_8_771:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_786
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_786

$L$_16_blocks_overflow_786:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_786:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_787





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_787
$L$_small_initial_partial_block_787:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_787:

        or      r13,r13
        je      NEAR $L$_after_reduction_787
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_787:
        jmp     NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_9_771:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_788
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_788

$L$_16_blocks_overflow_788:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_788:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb xmm20,xmm20,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_789





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_789
$L$_small_initial_partial_block_789:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_789:

        or      r13,r13
        je      NEAR $L$_after_reduction_789
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_789:
        jmp     NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_10_771:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_790
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_790

$L$_16_blocks_overflow_790:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_790:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb ymm20,ymm20,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_791





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_791
$L$_small_initial_partial_block_791:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_791:

        or      r13,r13
        je      NEAR $L$_after_reduction_791
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_791:
        jmp     NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_11_771:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_792
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_792

$L$_16_blocks_overflow_792:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_792:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_793





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_793
$L$_small_initial_partial_block_793:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_793:

        or      r13,r13
        je      NEAR $L$_after_reduction_793
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_793:
        jmp     NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_12_771:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_794
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_794

$L$_16_blocks_overflow_794:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_794:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_795





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_795
$L$_small_initial_partial_block_795:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_795:

        or      r13,r13
        je      NEAR $L$_after_reduction_795
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_795:
        jmp     NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_13_771:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_796
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_796

$L$_16_blocks_overflow_796:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_796:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb xmm21,xmm21,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_797





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_797
$L$_small_initial_partial_block_797:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_797:

        or      r13,r13
        je      NEAR $L$_after_reduction_797
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_797:
        jmp     NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_14_771:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_798
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_798

$L$_16_blocks_overflow_798:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_798:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb ymm21,ymm21,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_799





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_799
$L$_small_initial_partial_block_799:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_799:

        or      r13,r13
        je      NEAR $L$_after_reduction_799
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_799:
        jmp     NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_15_771:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_800
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_800

$L$_16_blocks_overflow_800:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_800:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_801





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_801
$L$_small_initial_partial_block_801:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_801:

        or      r13,r13
        je      NEAR $L$_after_reduction_801
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_801:
        jmp     NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_16_771:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_802
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_802

$L$_16_blocks_overflow_802:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_802:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_803:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_803:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_803:
        jmp     NEAR $L$_last_blocks_done_771
$L$_last_num_blocks_is_0_771:
        vmovdqa64       zmm13,ZMMWORD[768+rsp]
        vpxorq  zmm13,zmm13,zmm14
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[832+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpxorq  zmm26,zmm4,zmm10
        vpxorq  zmm24,zmm0,zmm6
        vpxorq  zmm25,zmm3,zmm7
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[896+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[960+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_771:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_659

$L$_message_below_equal_16_blocks_659:


        mov     r12d,r13d
        add     r12d,15
        shr     r12d,4
        cmp     r12,8
        je      NEAR $L$_small_initial_num_blocks_is_8_804
        jl      NEAR $L$_small_initial_num_blocks_is_7_1_804


        cmp     r12,12
        je      NEAR $L$_small_initial_num_blocks_is_12_804
        jl      NEAR $L$_small_initial_num_blocks_is_11_9_804


        cmp     r12,16
        je      NEAR $L$_small_initial_num_blocks_is_16_804
        cmp     r12,15
        je      NEAR $L$_small_initial_num_blocks_is_15_804
        cmp     r12,14
        je      NEAR $L$_small_initial_num_blocks_is_14_804
        jmp     NEAR $L$_small_initial_num_blocks_is_13_804

$L$_small_initial_num_blocks_is_11_9_804:

        cmp     r12,11
        je      NEAR $L$_small_initial_num_blocks_is_11_804
        cmp     r12,10
        je      NEAR $L$_small_initial_num_blocks_is_10_804
        jmp     NEAR $L$_small_initial_num_blocks_is_9_804

$L$_small_initial_num_blocks_is_7_1_804:
        cmp     r12,4
        je      NEAR $L$_small_initial_num_blocks_is_4_804
        jl      NEAR $L$_small_initial_num_blocks_is_3_1_804

        cmp     r12,7
        je      NEAR $L$_small_initial_num_blocks_is_7_804
        cmp     r12,6
        je      NEAR $L$_small_initial_num_blocks_is_6_804
        jmp     NEAR $L$_small_initial_num_blocks_is_5_804

$L$_small_initial_num_blocks_is_3_1_804:

        cmp     r12,3
        je      NEAR $L$_small_initial_num_blocks_is_3_804
        cmp     r12,2
        je      NEAR $L$_small_initial_num_blocks_is_2_804





$L$_small_initial_num_blocks_is_1_804:
        vmovdqa64       xmm29,XMMWORD[SHUF_MASK]
        vpaddd  xmm0,xmm2,XMMWORD[ONE]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,0
        vpshufb xmm0,xmm0,xmm29
        vmovdqu8        xmm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     xmm0,xmm0,xmm15
        vpxorq  xmm0,xmm0,xmm6
        vextracti32x4   xmm12,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb xmm6,xmm6,xmm29
        vextracti32x4   xmm13,zmm6,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_805





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm6,xmm20,0x01
        vpclmulqdq      xmm5,xmm6,xmm20,0x10
        vpclmulqdq      xmm0,xmm6,xmm20,0x11
        vpclmulqdq      xmm3,xmm6,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_805
$L$_small_initial_partial_block_805:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12











        vpxorq  xmm14,xmm14,xmm13

        jmp     NEAR $L$_after_reduction_805
$L$_small_initial_compute_done_805:
$L$_after_reduction_805:
        jmp     NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_2_804:
        vmovdqa64       ymm29,YMMWORD[SHUF_MASK]
        vshufi64x2      ymm0,ymm2,ymm2,0
        vpaddd  ymm0,ymm0,YMMWORD[ddq_add_1234]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,1
        vpshufb ymm0,ymm0,ymm29
        vmovdqu8        ymm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     ymm0,ymm0,ymm15
        vpxorq  ymm0,ymm0,ymm6
        vextracti32x4   xmm12,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb ymm6,ymm6,ymm29
        vextracti32x4   xmm13,zmm6,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_806





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm6,ymm20,0x01
        vpclmulqdq      ymm5,ymm6,ymm20,0x10
        vpclmulqdq      ymm0,ymm6,ymm20,0x11
        vpclmulqdq      ymm3,ymm6,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_806
$L$_small_initial_partial_block_806:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm6,xmm20,0x01
        vpclmulqdq      xmm5,xmm6,xmm20,0x10
        vpclmulqdq      xmm0,xmm6,xmm20,0x11
        vpclmulqdq      xmm3,xmm6,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_806:

        or      r13,r13
        je      NEAR $L$_after_reduction_806
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_806:
        jmp     NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_3_804:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,2
        vpshufb zmm0,zmm0,zmm29
        vmovdqu8        zmm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vextracti32x4   xmm12,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm6,zmm6,zmm29
        vextracti32x4   xmm13,zmm6,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_807





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_807
$L$_small_initial_partial_block_807:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm6,ymm20,0x01
        vpclmulqdq      ymm5,ymm6,ymm20,0x10
        vpclmulqdq      ymm0,ymm6,ymm20,0x11
        vpclmulqdq      ymm3,ymm6,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_807:

        or      r13,r13
        je      NEAR $L$_after_reduction_807
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_807:
        jmp     NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_4_804:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,3
        vpshufb zmm0,zmm0,zmm29
        vmovdqu8        zmm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vextracti32x4   xmm12,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm6,zmm6,zmm29
        vextracti32x4   xmm13,zmm6,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_808





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_808
$L$_small_initial_partial_block_808:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_808:

        or      r13,r13
        je      NEAR $L$_after_reduction_808
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_808:
        jmp     NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_5_804:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,0
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     xmm3,xmm3,xmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  xmm3,xmm3,xmm7
        vextracti32x4   xmm12,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm6,zmm29
        vpshufb xmm7,xmm7,xmm29
        vextracti32x4   xmm13,zmm7,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_809





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm7,xmm20,0x01
        vpclmulqdq      xmm5,xmm7,xmm20,0x10
        vpclmulqdq      xmm0,xmm7,xmm20,0x11
        vpclmulqdq      xmm3,xmm7,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_809
$L$_small_initial_partial_block_809:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_809:

        or      r13,r13
        je      NEAR $L$_after_reduction_809
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_809:
        jmp     NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_6_804:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,1
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     ymm3,ymm3,ymm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  ymm3,ymm3,ymm7
        vextracti32x4   xmm12,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm6,zmm29
        vpshufb ymm7,ymm7,ymm29
        vextracti32x4   xmm13,zmm7,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_810





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm7,ymm20,0x01
        vpclmulqdq      ymm5,ymm7,ymm20,0x10
        vpclmulqdq      ymm0,ymm7,ymm20,0x11
        vpclmulqdq      ymm3,ymm7,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_810
$L$_small_initial_partial_block_810:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm7,xmm20,0x01
        vpclmulqdq      xmm5,xmm7,xmm20,0x10
        vpclmulqdq      xmm0,xmm7,xmm20,0x11
        vpclmulqdq      xmm3,xmm7,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_810:

        or      r13,r13
        je      NEAR $L$_after_reduction_810
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_810:
        jmp     NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_7_804:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,2
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vextracti32x4   xmm12,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vextracti32x4   xmm13,zmm7,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_811





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm7,zmm20,0x01
        vpclmulqdq      zmm5,zmm7,zmm20,0x10
        vpclmulqdq      zmm0,zmm7,zmm20,0x11
        vpclmulqdq      zmm3,zmm7,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_811
$L$_small_initial_partial_block_811:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm7,ymm20,0x01
        vpclmulqdq      ymm5,ymm7,ymm20,0x10
        vpclmulqdq      ymm0,ymm7,ymm20,0x11
        vpclmulqdq      ymm3,ymm7,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_811:

        or      r13,r13
        je      NEAR $L$_after_reduction_811
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_811:
        jmp     NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_8_804:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,3
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vextracti32x4   xmm12,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vextracti32x4   xmm13,zmm7,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_812





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_812
$L$_small_initial_partial_block_812:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm7,zmm20,0x01
        vpclmulqdq      zmm5,zmm7,zmm20,0x10
        vpclmulqdq      zmm0,zmm7,zmm20,0x11
        vpclmulqdq      zmm3,zmm7,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_812:

        or      r13,r13
        je      NEAR $L$_after_reduction_812
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_812:
        jmp     NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_9_804:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,0
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     xmm4,xmm4,xmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  xmm4,xmm4,xmm10
        vextracti32x4   xmm12,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb xmm10,xmm10,xmm29
        vextracti32x4   xmm13,zmm10,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_813





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm10,xmm20,0x01
        vpclmulqdq      xmm5,xmm10,xmm20,0x10
        vpclmulqdq      xmm0,xmm10,xmm20,0x11
        vpclmulqdq      xmm3,xmm10,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_813
$L$_small_initial_partial_block_813:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_813:

        or      r13,r13
        je      NEAR $L$_after_reduction_813
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_813:
        jmp     NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_10_804:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,1
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     ymm4,ymm4,ymm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  ymm4,ymm4,ymm10
        vextracti32x4   xmm12,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb ymm10,ymm10,ymm29
        vextracti32x4   xmm13,zmm10,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_814





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm10,ymm20,0x01
        vpclmulqdq      ymm5,ymm10,ymm20,0x10
        vpclmulqdq      ymm0,ymm10,ymm20,0x11
        vpclmulqdq      ymm3,ymm10,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_814
$L$_small_initial_partial_block_814:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm10,xmm20,0x01
        vpclmulqdq      xmm5,xmm10,xmm20,0x10
        vpclmulqdq      xmm0,xmm10,xmm20,0x11
        vpclmulqdq      xmm3,xmm10,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_814:

        or      r13,r13
        je      NEAR $L$_after_reduction_814
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_814:
        jmp     NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_11_804:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,2
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vextracti32x4   xmm12,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vextracti32x4   xmm13,zmm10,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_815





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm10,zmm20,0x01
        vpclmulqdq      zmm5,zmm10,zmm20,0x10
        vpclmulqdq      zmm0,zmm10,zmm20,0x11
        vpclmulqdq      zmm3,zmm10,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_815
$L$_small_initial_partial_block_815:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm10,ymm20,0x01
        vpclmulqdq      ymm5,ymm10,ymm20,0x10
        vpclmulqdq      ymm0,ymm10,ymm20,0x11
        vpclmulqdq      ymm3,ymm10,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_815:

        or      r13,r13
        je      NEAR $L$_after_reduction_815
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_815:
        jmp     NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_12_804:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,3
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vextracti32x4   xmm12,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vextracti32x4   xmm13,zmm10,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_816





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_816
$L$_small_initial_partial_block_816:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm10,zmm20,0x01
        vpclmulqdq      zmm5,zmm10,zmm20,0x10
        vpclmulqdq      zmm0,zmm10,zmm20,0x11
        vpclmulqdq      zmm3,zmm10,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_816:

        or      r13,r13
        je      NEAR $L$_after_reduction_816
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_816:
        jmp     NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_13_804:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,0
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     xmm5,xmm5,xmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  xmm5,xmm5,xmm11
        vextracti32x4   xmm12,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb xmm11,xmm11,xmm29
        vextracti32x4   xmm13,zmm11,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_817





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm11,xmm20,0x01
        vpclmulqdq      xmm5,xmm11,xmm20,0x10
        vpclmulqdq      xmm0,xmm11,xmm20,0x11
        vpclmulqdq      xmm3,xmm11,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_817
$L$_small_initial_partial_block_817:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_817:

        or      r13,r13
        je      NEAR $L$_after_reduction_817
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_817:
        jmp     NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_14_804:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,1
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     ymm5,ymm5,ymm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  ymm5,ymm5,ymm11
        vextracti32x4   xmm12,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb ymm11,ymm11,ymm29
        vextracti32x4   xmm13,zmm11,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_818





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm11,ymm20,0x01
        vpclmulqdq      ymm5,ymm11,ymm20,0x10
        vpclmulqdq      ymm0,ymm11,ymm20,0x11
        vpclmulqdq      ymm3,ymm11,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_818
$L$_small_initial_partial_block_818:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm11,xmm20,0x01
        vpclmulqdq      xmm5,xmm11,xmm20,0x10
        vpclmulqdq      xmm0,xmm11,xmm20,0x11
        vpclmulqdq      xmm3,xmm11,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_818:

        or      r13,r13
        je      NEAR $L$_after_reduction_818
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_818:
        jmp     NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_15_804:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,2
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     zmm5,zmm5,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  zmm5,zmm5,zmm11
        vextracti32x4   xmm12,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vextracti32x4   xmm13,zmm11,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_819





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm11,zmm20,0x01
        vpclmulqdq      zmm5,zmm11,zmm20,0x10
        vpclmulqdq      zmm0,zmm11,zmm20,0x11
        vpclmulqdq      zmm3,zmm11,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_819
$L$_small_initial_partial_block_819:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm11,ymm20,0x01
        vpclmulqdq      ymm5,ymm11,ymm20,0x10
        vpclmulqdq      ymm0,ymm11,ymm20,0x11
        vpclmulqdq      ymm3,ymm11,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_819:

        or      r13,r13
        je      NEAR $L$_after_reduction_819
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_819:
        jmp     NEAR $L$_small_initial_blocks_encrypted_804
$L$_small_initial_num_blocks_is_16_804:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,3
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     zmm5,zmm5,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  zmm5,zmm5,zmm11
        vextracti32x4   xmm12,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vextracti32x4   xmm13,zmm11,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_820:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm11,zmm20,0x01
        vpclmulqdq      zmm5,zmm11,zmm20,0x10
        vpclmulqdq      zmm0,zmm11,zmm20,0x11
        vpclmulqdq      zmm3,zmm11,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_820:
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_820:
$L$_small_initial_blocks_encrypted_804:
$L$_ghash_done_659:
        vmovdqu64       XMMWORD[rdx],xmm2
        vmovdqu64       XMMWORD[64+rdx],xmm14
$L$_enc_dec_done_659:
        jmp     NEAR $L$exit_gcm_decrypt
ALIGN   32
$L$aes_gcm_decrypt_256_avx512:
        cmp     QWORD[112+rbp],0
        je      NEAR $L$_enc_dec_done_821
        xor     r14,r14
        vmovdqu64       xmm14,XMMWORD[64+rdx]

        mov     r11,QWORD[r8]
        or      r11,r11
        je      NEAR $L$_partial_block_done_822
        mov     r10d,16
        lea     r12,[byte_len_to_mask_table]
        cmp     QWORD[112+rbp],r10
        cmovc   r10,QWORD[112+rbp]
        add     r12,r10
        add     r12,r10
        kmovw   k1,[r12]
        vmovdqu8        xmm0{k1}{z},[r9]

        vmovdqu64       xmm3,XMMWORD[16+rdx]
        vmovdqu64       xmm4,XMMWORD[336+rdx]



        lea     r12,[SHIFT_MASK]
        add     r12,r11
        vmovdqu64       xmm5,XMMWORD[r12]
        vpshufb xmm3,xmm3,xmm5

        vmovdqa64       xmm6,xmm0
        vpxorq  xmm3,xmm3,xmm0


        mov     r13,QWORD[112+rbp]
        add     r13,r11
        sub     r13,16
        jge     NEAR $L$_no_extra_mask_822
        sub     r12,r13
$L$_no_extra_mask_822:



        vmovdqu64       xmm0,XMMWORD[16+r12]
        vpand   xmm3,xmm3,xmm0
        vpand   xmm6,xmm6,xmm0
        vpshufb xmm6,xmm6,XMMWORD[SHUF_MASK]
        vpshufb xmm6,xmm6,xmm5
        vpxorq  xmm14,xmm14,xmm6
        cmp     r13,0
        jl      NEAR $L$_partial_incomplete_822

        vpclmulqdq      xmm7,xmm14,xmm4,0x11
        vpclmulqdq      xmm10,xmm14,xmm4,0x00
        vpclmulqdq      xmm11,xmm14,xmm4,0x01
        vpclmulqdq      xmm14,xmm14,xmm4,0x10
        vpxorq  xmm14,xmm14,xmm11

        vpsrldq xmm11,xmm14,8
        vpslldq xmm14,xmm14,8
        vpxorq  xmm7,xmm7,xmm11
        vpxorq  xmm14,xmm14,xmm10



        vmovdqu64       xmm11,XMMWORD[POLY2]

        vpclmulqdq      xmm10,xmm11,xmm14,0x01
        vpslldq xmm10,xmm10,8
        vpxorq  xmm14,xmm14,xmm10



        vpclmulqdq      xmm10,xmm11,xmm14,0x00
        vpsrldq xmm10,xmm10,4
        vpclmulqdq      xmm14,xmm11,xmm14,0x10
        vpslldq xmm14,xmm14,4

        vpternlogq      xmm14,xmm7,xmm10,0x96

        mov     QWORD[r8],0

        mov     r12,r11
        mov     r11,16
        sub     r11,r12
        jmp     NEAR $L$_enc_dec_done_822

$L$_partial_incomplete_822:
        mov     r12,QWORD[112+rbp]
        add     QWORD[r8],r12
        mov     r11,QWORD[112+rbp]

$L$_enc_dec_done_822:


        lea     r12,[byte_len_to_mask_table]
        kmovw   k1,[r11*2+r12]
        vmovdqu64       XMMWORD[64+rdx],xmm14
        mov     r12,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r12]{k1},xmm3
$L$_partial_block_done_822:
        vmovdqu64       xmm2,XMMWORD[rdx]
        mov     r13,QWORD[112+rbp]
        sub     r13,r11
        je      NEAR $L$_enc_dec_done_821
        cmp     r13,256
        jbe     NEAR $L$_message_below_equal_16_blocks_821

        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vmovdqa64       zmm27,ZMMWORD[ddq_addbe_4444]
        vmovdqa64       zmm28,ZMMWORD[ddq_addbe_1234]






        vmovd   r15d,xmm2
        and     r15d,255

        vshufi64x2      zmm2,zmm2,zmm2,0
        vpshufb zmm2,zmm2,zmm29



        cmp     r15b,240
        jae     NEAR $L$_next_16_overflow_823
        vpaddd  zmm7,zmm2,zmm28
        vpaddd  zmm10,zmm7,zmm27
        vpaddd  zmm11,zmm10,zmm27
        vpaddd  zmm12,zmm11,zmm27
        jmp     NEAR $L$_next_16_ok_823
$L$_next_16_overflow_823:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm12,ZMMWORD[ddq_add_4444]
        vpaddd  zmm7,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm10,zmm7,zmm12
        vpaddd  zmm11,zmm10,zmm12
        vpaddd  zmm12,zmm11,zmm12
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vpshufb zmm12,zmm12,zmm29
$L$_next_16_ok_823:
        vshufi64x2      zmm2,zmm12,zmm12,255
        add     r15b,16

        vmovdqu8        zmm0,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm3,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm4,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm5,ZMMWORD[192+r11*1+r9]


        vbroadcastf64x2 zmm6,ZMMWORD[rcx]
        vpxorq  zmm7,zmm7,zmm6
        vpxorq  zmm10,zmm10,zmm6
        vpxorq  zmm11,zmm11,zmm6
        vpxorq  zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[16+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[32+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[48+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[64+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[80+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[96+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[112+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[128+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[144+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[160+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[176+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[192+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[208+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[224+rcx]
        vaesenclast     zmm7,zmm7,zmm6
        vaesenclast     zmm10,zmm10,zmm6
        vaesenclast     zmm11,zmm11,zmm6
        vaesenclast     zmm12,zmm12,zmm6


        vpxorq  zmm7,zmm7,zmm0
        vpxorq  zmm10,zmm10,zmm3
        vpxorq  zmm11,zmm11,zmm4
        vpxorq  zmm12,zmm12,zmm5


        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm7
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm10
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm11
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm12

        vpshufb zmm7,zmm0,zmm29
        vpshufb zmm10,zmm3,zmm29
        vpshufb zmm11,zmm4,zmm29
        vpshufb zmm12,zmm5,zmm29
        vmovdqa64       ZMMWORD[768+rsp],zmm7
        vmovdqa64       ZMMWORD[832+rsp],zmm10
        vmovdqa64       ZMMWORD[896+rsp],zmm11
        vmovdqa64       ZMMWORD[960+rsp],zmm12
        test    r14,r14
        jnz     NEAR $L$_skip_hkeys_precomputation_824

        vmovdqu64       zmm0,ZMMWORD[288+rdx]
        vmovdqu64       ZMMWORD[704+rsp],zmm0

        vmovdqu64       zmm3,ZMMWORD[224+rdx]
        vmovdqu64       ZMMWORD[640+rsp],zmm3


        vshufi64x2      zmm3,zmm3,zmm3,0x00

        vmovdqu64       zmm4,ZMMWORD[160+rdx]
        vmovdqu64       ZMMWORD[576+rsp],zmm4

        vmovdqu64       zmm5,ZMMWORD[96+rdx]
        vmovdqu64       ZMMWORD[512+rsp],zmm5
$L$_skip_hkeys_precomputation_824:
        cmp     r13,512
        jb      NEAR $L$_message_below_32_blocks_821



        cmp     r15b,240
        jae     NEAR $L$_next_16_overflow_825
        vpaddd  zmm7,zmm2,zmm28
        vpaddd  zmm10,zmm7,zmm27
        vpaddd  zmm11,zmm10,zmm27
        vpaddd  zmm12,zmm11,zmm27
        jmp     NEAR $L$_next_16_ok_825
$L$_next_16_overflow_825:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm12,ZMMWORD[ddq_add_4444]
        vpaddd  zmm7,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm10,zmm7,zmm12
        vpaddd  zmm11,zmm10,zmm12
        vpaddd  zmm12,zmm11,zmm12
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vpshufb zmm12,zmm12,zmm29
$L$_next_16_ok_825:
        vshufi64x2      zmm2,zmm12,zmm12,255
        add     r15b,16

        vmovdqu8        zmm0,ZMMWORD[256+r11*1+r9]
        vmovdqu8        zmm3,ZMMWORD[320+r11*1+r9]
        vmovdqu8        zmm4,ZMMWORD[384+r11*1+r9]
        vmovdqu8        zmm5,ZMMWORD[448+r11*1+r9]


        vbroadcastf64x2 zmm6,ZMMWORD[rcx]
        vpxorq  zmm7,zmm7,zmm6
        vpxorq  zmm10,zmm10,zmm6
        vpxorq  zmm11,zmm11,zmm6
        vpxorq  zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[16+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[32+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[48+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[64+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[80+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[96+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[112+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[128+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[144+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[160+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[176+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[192+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[208+rcx]
        vaesenc zmm7,zmm7,zmm6
        vaesenc zmm10,zmm10,zmm6
        vaesenc zmm11,zmm11,zmm6
        vaesenc zmm12,zmm12,zmm6
        vbroadcastf64x2 zmm6,ZMMWORD[224+rcx]
        vaesenclast     zmm7,zmm7,zmm6
        vaesenclast     zmm10,zmm10,zmm6
        vaesenclast     zmm11,zmm11,zmm6
        vaesenclast     zmm12,zmm12,zmm6


        vpxorq  zmm7,zmm7,zmm0
        vpxorq  zmm10,zmm10,zmm3
        vpxorq  zmm11,zmm11,zmm4
        vpxorq  zmm12,zmm12,zmm5


        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[256+r11*1+r10],zmm7
        vmovdqu8        ZMMWORD[320+r11*1+r10],zmm10
        vmovdqu8        ZMMWORD[384+r11*1+r10],zmm11
        vmovdqu8        ZMMWORD[448+r11*1+r10],zmm12

        vpshufb zmm7,zmm0,zmm29
        vpshufb zmm10,zmm3,zmm29
        vpshufb zmm11,zmm4,zmm29
        vpshufb zmm12,zmm5,zmm29
        vmovdqa64       ZMMWORD[1024+rsp],zmm7
        vmovdqa64       ZMMWORD[1088+rsp],zmm10
        vmovdqa64       ZMMWORD[1152+rsp],zmm11
        vmovdqa64       ZMMWORD[1216+rsp],zmm12
        test    r14,r14
        jnz     NEAR $L$_skip_hkeys_precomputation_826
        vmovdqu64       zmm3,ZMMWORD[640+rsp]


        vshufi64x2      zmm3,zmm3,zmm3,0x00

        vmovdqu64       zmm4,ZMMWORD[576+rsp]
        vmovdqu64       zmm5,ZMMWORD[512+rsp]

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[448+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[384+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[320+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[256+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[192+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[128+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[64+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[rsp],zmm5
$L$_skip_hkeys_precomputation_826:
        mov     r14,1
        add     r11,512
        sub     r13,512

        cmp     r13,768
        jb      NEAR $L$_no_more_big_nblocks_821
$L$_encrypt_big_nblocks_821:
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_827
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_827
$L$_16_blocks_overflow_827:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_827:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[192+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm26,zmm10,zmm15
        vpxorq  zmm24,zmm6,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]

        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm5
        vpshufb zmm0,zmm17,zmm29
        vpshufb zmm3,zmm19,zmm29
        vpshufb zmm4,zmm20,zmm29
        vpshufb zmm5,zmm21,zmm29
        vmovdqa64       ZMMWORD[1280+rsp],zmm0
        vmovdqa64       ZMMWORD[1344+rsp],zmm3
        vmovdqa64       ZMMWORD[1408+rsp],zmm4
        vmovdqa64       ZMMWORD[1472+rsp],zmm5
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_828
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_828
$L$_16_blocks_overflow_828:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_828:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[256+rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[320+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[384+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[448+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[256+r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[320+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[384+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[448+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vpternlogq      zmm24,zmm6,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]

        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[256+r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[320+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[384+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[448+r11*1+r10],zmm5
        vpshufb zmm0,zmm17,zmm29
        vpshufb zmm3,zmm19,zmm29
        vpshufb zmm4,zmm20,zmm29
        vpshufb zmm5,zmm21,zmm29
        vmovdqa64       ZMMWORD[768+rsp],zmm0
        vmovdqa64       ZMMWORD[832+rsp],zmm3
        vmovdqa64       ZMMWORD[896+rsp],zmm4
        vmovdqa64       ZMMWORD[960+rsp],zmm5
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_829
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_829
$L$_16_blocks_overflow_829:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_829:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[512+r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[576+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[640+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[704+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]


        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96

        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpternlogq      zmm6,zmm12,zmm15,0x96
        vpxorq  zmm6,zmm6,zmm24
        vpternlogq      zmm7,zmm13,zmm10,0x96
        vpxorq  zmm7,zmm7,zmm25
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vextracti64x4   ymm12,zmm6,1
        vpxorq  ymm6,ymm6,ymm12
        vextracti32x4   xmm12,ymm6,1
        vpxorq  xmm6,xmm6,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]

        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm6,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[512+r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[576+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[640+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[704+r11*1+r10],zmm5
        vpshufb zmm0,zmm17,zmm29
        vpshufb zmm3,zmm19,zmm29
        vpshufb zmm4,zmm20,zmm29
        vpshufb zmm5,zmm21,zmm29
        vmovdqa64       ZMMWORD[1024+rsp],zmm0
        vmovdqa64       ZMMWORD[1088+rsp],zmm3
        vmovdqa64       ZMMWORD[1152+rsp],zmm4
        vmovdqa64       ZMMWORD[1216+rsp],zmm5
        vmovdqa64       zmm14,zmm6

        add     r11,768
        sub     r13,768
        cmp     r13,768
        jae     NEAR $L$_encrypt_big_nblocks_821

$L$_no_more_big_nblocks_821:

        cmp     r13,512
        jae     NEAR $L$_encrypt_32_blocks_821

        cmp     r13,256
        jae     NEAR $L$_encrypt_16_blocks_821
$L$_encrypt_0_blocks_ghash_32_821:
        mov     r10d,r13d
        and     r10d,~15
        mov     ebx,256
        sub     ebx,r10d
        vmovdqa64       zmm13,ZMMWORD[768+rsp]
        vpxorq  zmm13,zmm13,zmm14
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[832+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpxorq  zmm26,zmm4,zmm10
        vpxorq  zmm24,zmm0,zmm6
        vpxorq  zmm25,zmm3,zmm7
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[896+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[960+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        add     ebx,256
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_830

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_830
        jb      NEAR $L$_last_num_blocks_is_7_1_830


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_830
        jb      NEAR $L$_last_num_blocks_is_11_9_830


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_830
        ja      NEAR $L$_last_num_blocks_is_16_830
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_830
        jmp     NEAR $L$_last_num_blocks_is_13_830

$L$_last_num_blocks_is_11_9_830:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_830
        ja      NEAR $L$_last_num_blocks_is_11_830
        jmp     NEAR $L$_last_num_blocks_is_9_830

$L$_last_num_blocks_is_7_1_830:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_830
        jb      NEAR $L$_last_num_blocks_is_3_1_830

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_830
        je      NEAR $L$_last_num_blocks_is_6_830
        jmp     NEAR $L$_last_num_blocks_is_5_830

$L$_last_num_blocks_is_3_1_830:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_830
        je      NEAR $L$_last_num_blocks_is_2_830
$L$_last_num_blocks_is_1_830:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_831
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_831

$L$_16_blocks_overflow_831:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_831:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc xmm0,xmm0,xmm31
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb xmm17,xmm17,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_832





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_832
$L$_small_initial_partial_block_832:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11


        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm0,XMMWORD[POLY2]


        vpclmulqdq      xmm3,xmm0,xmm25,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm3,xmm25,xmm3


        vpclmulqdq      xmm4,xmm0,xmm3,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm14,xmm0,xmm3,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm4,xmm24,0x96












        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_832
$L$_small_initial_compute_done_832:
$L$_after_reduction_832:
        jmp     NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_2_830:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_833
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_833

$L$_16_blocks_overflow_833:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_833:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc ymm0,ymm0,ymm31
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb ymm17,ymm17,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_834





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_834
$L$_small_initial_partial_block_834:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_834:

        or      r13,r13
        je      NEAR $L$_after_reduction_834
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_834:
        jmp     NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_3_830:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_835
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_835

$L$_16_blocks_overflow_835:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_835:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_836





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_836
$L$_small_initial_partial_block_836:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_836:

        or      r13,r13
        je      NEAR $L$_after_reduction_836
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_836:
        jmp     NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_4_830:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_837
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_837

$L$_16_blocks_overflow_837:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_837:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_838





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_838
$L$_small_initial_partial_block_838:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_838:

        or      r13,r13
        je      NEAR $L$_after_reduction_838
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_838:
        jmp     NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_5_830:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_839
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_839

$L$_16_blocks_overflow_839:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_839:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb xmm19,xmm19,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_840





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_840
$L$_small_initial_partial_block_840:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_840:

        or      r13,r13
        je      NEAR $L$_after_reduction_840
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_840:
        jmp     NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_6_830:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_841
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_841

$L$_16_blocks_overflow_841:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_841:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb ymm19,ymm19,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_842





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_842
$L$_small_initial_partial_block_842:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_842:

        or      r13,r13
        je      NEAR $L$_after_reduction_842
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_842:
        jmp     NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_7_830:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_843
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_843

$L$_16_blocks_overflow_843:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_843:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_844





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_844
$L$_small_initial_partial_block_844:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_844:

        or      r13,r13
        je      NEAR $L$_after_reduction_844
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_844:
        jmp     NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_8_830:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_845
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_845

$L$_16_blocks_overflow_845:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_845:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_846





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_846
$L$_small_initial_partial_block_846:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_846:

        or      r13,r13
        je      NEAR $L$_after_reduction_846
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_846:
        jmp     NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_9_830:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_847
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_847

$L$_16_blocks_overflow_847:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_847:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb xmm20,xmm20,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_848





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_848
$L$_small_initial_partial_block_848:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_848:

        or      r13,r13
        je      NEAR $L$_after_reduction_848
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_848:
        jmp     NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_10_830:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_849
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_849

$L$_16_blocks_overflow_849:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_849:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb ymm20,ymm20,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_850





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_850
$L$_small_initial_partial_block_850:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_850:

        or      r13,r13
        je      NEAR $L$_after_reduction_850
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_850:
        jmp     NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_11_830:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_851
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_851

$L$_16_blocks_overflow_851:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_851:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_852





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_852
$L$_small_initial_partial_block_852:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_852:

        or      r13,r13
        je      NEAR $L$_after_reduction_852
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_852:
        jmp     NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_12_830:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_853
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_853

$L$_16_blocks_overflow_853:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_853:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_854





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_854
$L$_small_initial_partial_block_854:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_854:

        or      r13,r13
        je      NEAR $L$_after_reduction_854
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_854:
        jmp     NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_13_830:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_855
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_855

$L$_16_blocks_overflow_855:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_855:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb xmm21,xmm21,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_856





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_856
$L$_small_initial_partial_block_856:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_856:

        or      r13,r13
        je      NEAR $L$_after_reduction_856
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_856:
        jmp     NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_14_830:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_857
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_857

$L$_16_blocks_overflow_857:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_857:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb ymm21,ymm21,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_858





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_858
$L$_small_initial_partial_block_858:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_858:

        or      r13,r13
        je      NEAR $L$_after_reduction_858
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_858:
        jmp     NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_15_830:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_859
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_859

$L$_16_blocks_overflow_859:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_859:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_860





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_860
$L$_small_initial_partial_block_860:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_860:

        or      r13,r13
        je      NEAR $L$_after_reduction_860
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_860:
        jmp     NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_16_830:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_861
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_861

$L$_16_blocks_overflow_861:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_861:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm24,zmm14,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_862:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_862:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_862:
        jmp     NEAR $L$_last_blocks_done_830
$L$_last_num_blocks_is_0_830:
        vmovdqa64       zmm13,ZMMWORD[1024+rsp]
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1088+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1152+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1216+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_830:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_821
$L$_encrypt_32_blocks_821:
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_863
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_863
$L$_16_blocks_overflow_863:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_863:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[192+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm26,zmm10,zmm15
        vpxorq  zmm24,zmm6,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]

        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm5
        vpshufb zmm0,zmm17,zmm29
        vpshufb zmm3,zmm19,zmm29
        vpshufb zmm4,zmm20,zmm29
        vpshufb zmm5,zmm21,zmm29
        vmovdqa64       ZMMWORD[1280+rsp],zmm0
        vmovdqa64       ZMMWORD[1344+rsp],zmm3
        vmovdqa64       ZMMWORD[1408+rsp],zmm4
        vmovdqa64       ZMMWORD[1472+rsp],zmm5
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_864
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_864
$L$_16_blocks_overflow_864:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_864:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1024+rsp]
        vmovdqu64       zmm1,ZMMWORD[256+rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[320+rsp]
        vmovdqa64       zmm22,ZMMWORD[1088+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[384+rsp]
        vmovdqa64       zmm8,ZMMWORD[1152+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[448+rsp]
        vmovdqa64       zmm22,ZMMWORD[1216+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[256+r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[320+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[384+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[448+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm26,zmm10,zmm15,0x96
        vpternlogq      zmm24,zmm6,zmm12,0x96
        vpternlogq      zmm25,zmm7,zmm13,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]

        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[256+r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[320+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[384+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[448+r11*1+r10],zmm5
        vpshufb zmm0,zmm17,zmm29
        vpshufb zmm3,zmm19,zmm29
        vpshufb zmm4,zmm20,zmm29
        vpshufb zmm5,zmm21,zmm29
        vmovdqa64       ZMMWORD[768+rsp],zmm0
        vmovdqa64       ZMMWORD[832+rsp],zmm3
        vmovdqa64       ZMMWORD[896+rsp],zmm4
        vmovdqa64       ZMMWORD[960+rsp],zmm5
        vmovdqa64       zmm13,ZMMWORD[1280+rsp]
        vmovdqu64       zmm12,ZMMWORD[512+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1344+rsp]
        vmovdqu64       zmm12,ZMMWORD[576+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1408+rsp]
        vmovdqu64       zmm12,ZMMWORD[640+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1472+rsp]
        vmovdqu64       zmm12,ZMMWORD[704+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

        sub     r13,512
        add     r11,512
        mov     r10d,r13d
        and     r10d,~15
        mov     ebx,512
        sub     ebx,r10d
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_865

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_865
        jb      NEAR $L$_last_num_blocks_is_7_1_865


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_865
        jb      NEAR $L$_last_num_blocks_is_11_9_865


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_865
        ja      NEAR $L$_last_num_blocks_is_16_865
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_865
        jmp     NEAR $L$_last_num_blocks_is_13_865

$L$_last_num_blocks_is_11_9_865:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_865
        ja      NEAR $L$_last_num_blocks_is_11_865
        jmp     NEAR $L$_last_num_blocks_is_9_865

$L$_last_num_blocks_is_7_1_865:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_865
        jb      NEAR $L$_last_num_blocks_is_3_1_865

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_865
        je      NEAR $L$_last_num_blocks_is_6_865
        jmp     NEAR $L$_last_num_blocks_is_5_865

$L$_last_num_blocks_is_3_1_865:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_865
        je      NEAR $L$_last_num_blocks_is_2_865
$L$_last_num_blocks_is_1_865:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_866
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_866

$L$_16_blocks_overflow_866:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_866:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc xmm0,xmm0,xmm31
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb xmm17,xmm17,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_867





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_867
$L$_small_initial_partial_block_867:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11


        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm0,XMMWORD[POLY2]


        vpclmulqdq      xmm3,xmm0,xmm25,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm3,xmm25,xmm3


        vpclmulqdq      xmm4,xmm0,xmm3,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm14,xmm0,xmm3,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm4,xmm24,0x96












        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_867
$L$_small_initial_compute_done_867:
$L$_after_reduction_867:
        jmp     NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_2_865:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_868
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_868

$L$_16_blocks_overflow_868:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_868:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc ymm0,ymm0,ymm31
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb ymm17,ymm17,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_869





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_869
$L$_small_initial_partial_block_869:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_869:

        or      r13,r13
        je      NEAR $L$_after_reduction_869
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_869:
        jmp     NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_3_865:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_870
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_870

$L$_16_blocks_overflow_870:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_870:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_871





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_871
$L$_small_initial_partial_block_871:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_871:

        or      r13,r13
        je      NEAR $L$_after_reduction_871
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_871:
        jmp     NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_4_865:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_872
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_872

$L$_16_blocks_overflow_872:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_872:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_873





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_873
$L$_small_initial_partial_block_873:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_873:

        or      r13,r13
        je      NEAR $L$_after_reduction_873
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_873:
        jmp     NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_5_865:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_874
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_874

$L$_16_blocks_overflow_874:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_874:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb xmm19,xmm19,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_875





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_875
$L$_small_initial_partial_block_875:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_875:

        or      r13,r13
        je      NEAR $L$_after_reduction_875
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_875:
        jmp     NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_6_865:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_876
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_876

$L$_16_blocks_overflow_876:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_876:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb ymm19,ymm19,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_877





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_877
$L$_small_initial_partial_block_877:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_877:

        or      r13,r13
        je      NEAR $L$_after_reduction_877
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_877:
        jmp     NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_7_865:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_878
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_878

$L$_16_blocks_overflow_878:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_878:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_879





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_879
$L$_small_initial_partial_block_879:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_879:

        or      r13,r13
        je      NEAR $L$_after_reduction_879
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_879:
        jmp     NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_8_865:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_880
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_880

$L$_16_blocks_overflow_880:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_880:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_881





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_881
$L$_small_initial_partial_block_881:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_881:

        or      r13,r13
        je      NEAR $L$_after_reduction_881
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_881:
        jmp     NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_9_865:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_882
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_882

$L$_16_blocks_overflow_882:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_882:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb xmm20,xmm20,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_883





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_883
$L$_small_initial_partial_block_883:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_883:

        or      r13,r13
        je      NEAR $L$_after_reduction_883
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_883:
        jmp     NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_10_865:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_884
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_884

$L$_16_blocks_overflow_884:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_884:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb ymm20,ymm20,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_885





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_885
$L$_small_initial_partial_block_885:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_885:

        or      r13,r13
        je      NEAR $L$_after_reduction_885
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_885:
        jmp     NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_11_865:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_886
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_886

$L$_16_blocks_overflow_886:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_886:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_887





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_887
$L$_small_initial_partial_block_887:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_887:

        or      r13,r13
        je      NEAR $L$_after_reduction_887
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_887:
        jmp     NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_12_865:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_888
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_888

$L$_16_blocks_overflow_888:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_888:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_889





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_889
$L$_small_initial_partial_block_889:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_889:

        or      r13,r13
        je      NEAR $L$_after_reduction_889
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_889:
        jmp     NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_13_865:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_890
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_890

$L$_16_blocks_overflow_890:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_890:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb xmm21,xmm21,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_891





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_891
$L$_small_initial_partial_block_891:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_891:

        or      r13,r13
        je      NEAR $L$_after_reduction_891
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_891:
        jmp     NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_14_865:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_892
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_892

$L$_16_blocks_overflow_892:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_892:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb ymm21,ymm21,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_893





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_893
$L$_small_initial_partial_block_893:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_893:

        or      r13,r13
        je      NEAR $L$_after_reduction_893
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_893:
        jmp     NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_15_865:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_894
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_894

$L$_16_blocks_overflow_894:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_894:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_895





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_895
$L$_small_initial_partial_block_895:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_895:

        or      r13,r13
        je      NEAR $L$_after_reduction_895
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_895:
        jmp     NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_16_865:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_896
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_896

$L$_16_blocks_overflow_896:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_896:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_897:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_897:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_897:
        jmp     NEAR $L$_last_blocks_done_865
$L$_last_num_blocks_is_0_865:
        vmovdqa64       zmm13,ZMMWORD[768+rsp]
        vpxorq  zmm13,zmm13,zmm14
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[832+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpxorq  zmm26,zmm4,zmm10
        vpxorq  zmm24,zmm0,zmm6
        vpxorq  zmm25,zmm3,zmm7
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[896+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[960+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_865:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_821
$L$_encrypt_16_blocks_821:
        cmp     r15b,240
        jae     NEAR $L$_16_blocks_overflow_898
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_898
$L$_16_blocks_overflow_898:
        vpshufb zmm2,zmm2,zmm29
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_898:
        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rsp]




        vshufi64x2      zmm2,zmm5,zmm5,255
        add     r15b,16


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]







        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]



        vpclmulqdq      zmm6,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]



        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00


        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]



        vpternlogq      zmm6,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96



        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]



        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21,ZMMWORD[192+r11*1+r9]



        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]



        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00


        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm26,zmm10,zmm15
        vpxorq  zmm24,zmm6,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]

        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]

        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30



        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21



        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10],zmm5
        vpshufb zmm0,zmm17,zmm29
        vpshufb zmm3,zmm19,zmm29
        vpshufb zmm4,zmm20,zmm29
        vpshufb zmm5,zmm21,zmm29
        vmovdqa64       ZMMWORD[1280+rsp],zmm0
        vmovdqa64       ZMMWORD[1344+rsp],zmm3
        vmovdqa64       ZMMWORD[1408+rsp],zmm4
        vmovdqa64       ZMMWORD[1472+rsp],zmm5
        vmovdqa64       zmm13,ZMMWORD[1024+rsp]
        vmovdqu64       zmm12,ZMMWORD[256+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1088+rsp]
        vmovdqu64       zmm12,ZMMWORD[320+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1152+rsp]
        vmovdqu64       zmm12,ZMMWORD[384+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1216+rsp]
        vmovdqu64       zmm12,ZMMWORD[448+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        sub     r13,256
        add     r11,256
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_899

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_899
        jb      NEAR $L$_last_num_blocks_is_7_1_899


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_899
        jb      NEAR $L$_last_num_blocks_is_11_9_899


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_899
        ja      NEAR $L$_last_num_blocks_is_16_899
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_899
        jmp     NEAR $L$_last_num_blocks_is_13_899

$L$_last_num_blocks_is_11_9_899:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_899
        ja      NEAR $L$_last_num_blocks_is_11_899
        jmp     NEAR $L$_last_num_blocks_is_9_899

$L$_last_num_blocks_is_7_1_899:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_899
        jb      NEAR $L$_last_num_blocks_is_3_1_899

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_899
        je      NEAR $L$_last_num_blocks_is_6_899
        jmp     NEAR $L$_last_num_blocks_is_5_899

$L$_last_num_blocks_is_3_1_899:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_899
        je      NEAR $L$_last_num_blocks_is_2_899
$L$_last_num_blocks_is_1_899:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_900
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_900

$L$_16_blocks_overflow_900:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_900:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc xmm0,xmm0,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc xmm0,xmm0,xmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb xmm17,xmm17,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_901





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_901
$L$_small_initial_partial_block_901:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11











        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_901
$L$_small_initial_compute_done_901:
$L$_after_reduction_901:
        jmp     NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_2_899:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_902
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_902

$L$_16_blocks_overflow_902:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_902:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc ymm0,ymm0,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc ymm0,ymm0,ymm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb ymm17,ymm17,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_903





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_903
$L$_small_initial_partial_block_903:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_903:

        or      r13,r13
        je      NEAR $L$_after_reduction_903
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_903:
        jmp     NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_3_899:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_904
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_904

$L$_16_blocks_overflow_904:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_904:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_905





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_905
$L$_small_initial_partial_block_905:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_905:

        or      r13,r13
        je      NEAR $L$_after_reduction_905
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_905:
        jmp     NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_4_899:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_906
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_906

$L$_16_blocks_overflow_906:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_906:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_907





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_907
$L$_small_initial_partial_block_907:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_907:

        or      r13,r13
        je      NEAR $L$_after_reduction_907
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_907:
        jmp     NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_5_899:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_908
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_908

$L$_16_blocks_overflow_908:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_908:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb xmm19,xmm19,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_909





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_909
$L$_small_initial_partial_block_909:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_909:

        or      r13,r13
        je      NEAR $L$_after_reduction_909
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_909:
        jmp     NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_6_899:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_910
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_910

$L$_16_blocks_overflow_910:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_910:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb ymm19,ymm19,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_911





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_911
$L$_small_initial_partial_block_911:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_911:

        or      r13,r13
        je      NEAR $L$_after_reduction_911
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_911:
        jmp     NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_7_899:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_912
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_912

$L$_16_blocks_overflow_912:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_912:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_913





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_913
$L$_small_initial_partial_block_913:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_913:

        or      r13,r13
        je      NEAR $L$_after_reduction_913
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_913:
        jmp     NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_8_899:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_914
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_914

$L$_16_blocks_overflow_914:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_914:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_915





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_915
$L$_small_initial_partial_block_915:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_915:

        or      r13,r13
        je      NEAR $L$_after_reduction_915
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_915:
        jmp     NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_9_899:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_916
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_916

$L$_16_blocks_overflow_916:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_916:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb xmm20,xmm20,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_917





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_917
$L$_small_initial_partial_block_917:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_917:

        or      r13,r13
        je      NEAR $L$_after_reduction_917
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_917:
        jmp     NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_10_899:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_918
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_918

$L$_16_blocks_overflow_918:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_918:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb ymm20,ymm20,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_919





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_919
$L$_small_initial_partial_block_919:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_919:

        or      r13,r13
        je      NEAR $L$_after_reduction_919
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_919:
        jmp     NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_11_899:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_920
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_920

$L$_16_blocks_overflow_920:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_920:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_921





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_921
$L$_small_initial_partial_block_921:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_921:

        or      r13,r13
        je      NEAR $L$_after_reduction_921
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_921:
        jmp     NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_12_899:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_922
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_922

$L$_16_blocks_overflow_922:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_922:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_923





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_923
$L$_small_initial_partial_block_923:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_923:

        or      r13,r13
        je      NEAR $L$_after_reduction_923
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_923:
        jmp     NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_13_899:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_924
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_924

$L$_16_blocks_overflow_924:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_924:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb xmm21,xmm21,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_925





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_925
$L$_small_initial_partial_block_925:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_925:

        or      r13,r13
        je      NEAR $L$_after_reduction_925
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_925:
        jmp     NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_14_899:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_926
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_926

$L$_16_blocks_overflow_926:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_926:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb ymm21,ymm21,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_927





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_927
$L$_small_initial_partial_block_927:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_927:

        or      r13,r13
        je      NEAR $L$_after_reduction_927
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_927:
        jmp     NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_15_899:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_928
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_928

$L$_16_blocks_overflow_928:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_928:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_929





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_929
$L$_small_initial_partial_block_929:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_929:

        or      r13,r13
        je      NEAR $L$_after_reduction_929
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_929:
        jmp     NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_16_899:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_930
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_930

$L$_16_blocks_overflow_930:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_930:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vmovdqa64       zmm8,ZMMWORD[1280+rsp]
        vmovdqu64       zmm1,ZMMWORD[512+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[576+rsp]
        vmovdqa64       zmm22,ZMMWORD[1344+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[640+rsp]
        vmovdqa64       zmm8,ZMMWORD[1408+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[704+rsp]
        vmovdqa64       zmm22,ZMMWORD[1472+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpternlogq      zmm14,zmm24,zmm12,0x96
        vpternlogq      zmm7,zmm25,zmm13,0x96
        vpternlogq      zmm10,zmm26,zmm15,0x96
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vpsrldq zmm15,zmm10,8
        vpslldq zmm10,zmm10,8

        vmovdqa64       xmm16,XMMWORD[POLY2]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vpxorq  zmm14,zmm14,zmm15
        vpxorq  zmm7,zmm7,zmm10
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vextracti64x4   ymm12,zmm14,1
        vpxorq  ymm14,ymm14,ymm12
        vextracti32x4   xmm12,ymm14,1
        vpxorq  xmm14,xmm14,xmm12
        vextracti64x4   ymm13,zmm7,1
        vpxorq  ymm7,ymm7,ymm13
        vextracti32x4   xmm13,ymm7,1
        vpxorq  xmm7,xmm7,xmm13
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vpclmulqdq      xmm13,xmm16,xmm7,0x01
        vpslldq xmm13,xmm13,8
        vpxorq  xmm13,xmm7,xmm13
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vpclmulqdq      xmm12,xmm16,xmm13,0x00
        vpsrldq xmm12,xmm12,4
        vpclmulqdq      xmm15,xmm16,xmm13,0x10
        vpslldq xmm15,xmm15,4

        vpternlogq      xmm14,xmm15,xmm12,0x96
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_931:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vpxorq  zmm17,zmm17,zmm14
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm31
        vpxorq  zmm0,zmm0,zmm8
        vpxorq  zmm3,zmm3,zmm22

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_931:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_931:
        jmp     NEAR $L$_last_blocks_done_899
$L$_last_num_blocks_is_0_899:
        vmovdqa64       zmm13,ZMMWORD[1280+rsp]
        vmovdqu64       zmm12,ZMMWORD[512+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1344+rsp]
        vmovdqu64       zmm12,ZMMWORD[576+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[1408+rsp]
        vmovdqu64       zmm12,ZMMWORD[640+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[1472+rsp]
        vmovdqu64       zmm12,ZMMWORD[704+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_899:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_821

$L$_message_below_32_blocks_821:


        sub     r13,256
        add     r11,256
        mov     r10d,r13d
        test    r14,r14
        jnz     NEAR $L$_skip_hkeys_precomputation_932
        vmovdqu64       zmm3,ZMMWORD[640+rsp]


        vshufi64x2      zmm3,zmm3,zmm3,0x00

        vmovdqu64       zmm4,ZMMWORD[576+rsp]
        vmovdqu64       zmm5,ZMMWORD[512+rsp]

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[448+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[384+rsp],zmm5

        vpclmulqdq      zmm6,zmm4,zmm3,0x11
        vpclmulqdq      zmm7,zmm4,zmm3,0x00
        vpclmulqdq      zmm10,zmm4,zmm3,0x01
        vpclmulqdq      zmm4,zmm4,zmm3,0x10
        vpxorq  zmm4,zmm4,zmm10

        vpsrldq zmm10,zmm4,8
        vpslldq zmm4,zmm4,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm4,zmm4,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm4,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm4,zmm4,zmm7



        vpclmulqdq      zmm7,zmm10,zmm4,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm4,zmm10,zmm4,0x10
        vpslldq zmm4,zmm4,4

        vpternlogq      zmm4,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[320+rsp],zmm4

        vpclmulqdq      zmm6,zmm5,zmm3,0x11
        vpclmulqdq      zmm7,zmm5,zmm3,0x00
        vpclmulqdq      zmm10,zmm5,zmm3,0x01
        vpclmulqdq      zmm5,zmm5,zmm3,0x10
        vpxorq  zmm5,zmm5,zmm10

        vpsrldq zmm10,zmm5,8
        vpslldq zmm5,zmm5,8
        vpxorq  zmm6,zmm6,zmm10
        vpxorq  zmm5,zmm5,zmm7



        vmovdqu64       zmm10,ZMMWORD[POLY2]

        vpclmulqdq      zmm7,zmm10,zmm5,0x01
        vpslldq zmm7,zmm7,8
        vpxorq  zmm5,zmm5,zmm7



        vpclmulqdq      zmm7,zmm10,zmm5,0x00
        vpsrldq zmm7,zmm7,4
        vpclmulqdq      zmm5,zmm10,zmm5,0x10
        vpslldq zmm5,zmm5,4

        vpternlogq      zmm5,zmm6,zmm7,0x96

        vmovdqu64       ZMMWORD[256+rsp],zmm5
$L$_skip_hkeys_precomputation_932:
        mov     r14,1
        and     r10d,~15
        mov     ebx,512
        sub     ebx,r10d
        mov     r10d,r13d
        add     r10d,15
        shr     r10d,4
        je      NEAR $L$_last_num_blocks_is_0_933

        cmp     r10d,8
        je      NEAR $L$_last_num_blocks_is_8_933
        jb      NEAR $L$_last_num_blocks_is_7_1_933


        cmp     r10d,12
        je      NEAR $L$_last_num_blocks_is_12_933
        jb      NEAR $L$_last_num_blocks_is_11_9_933


        cmp     r10d,15
        je      NEAR $L$_last_num_blocks_is_15_933
        ja      NEAR $L$_last_num_blocks_is_16_933
        cmp     r10d,14
        je      NEAR $L$_last_num_blocks_is_14_933
        jmp     NEAR $L$_last_num_blocks_is_13_933

$L$_last_num_blocks_is_11_9_933:

        cmp     r10d,10
        je      NEAR $L$_last_num_blocks_is_10_933
        ja      NEAR $L$_last_num_blocks_is_11_933
        jmp     NEAR $L$_last_num_blocks_is_9_933

$L$_last_num_blocks_is_7_1_933:
        cmp     r10d,4
        je      NEAR $L$_last_num_blocks_is_4_933
        jb      NEAR $L$_last_num_blocks_is_3_1_933

        cmp     r10d,6
        ja      NEAR $L$_last_num_blocks_is_7_933
        je      NEAR $L$_last_num_blocks_is_6_933
        jmp     NEAR $L$_last_num_blocks_is_5_933

$L$_last_num_blocks_is_3_1_933:

        cmp     r10d,2
        ja      NEAR $L$_last_num_blocks_is_3_933
        je      NEAR $L$_last_num_blocks_is_2_933
$L$_last_num_blocks_is_1_933:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,255
        jae     NEAR $L$_16_blocks_overflow_934
        vpaddd  xmm0,xmm2,xmm28
        jmp     NEAR $L$_16_blocks_ok_934

$L$_16_blocks_overflow_934:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb xmm0,xmm0,xmm29
$L$_16_blocks_ok_934:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        xmm17{k1}{z},[r11*1+r9]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc xmm0,xmm0,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc xmm0,xmm0,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc xmm0,xmm0,xmm31
        vaesenclast     xmm0,xmm0,xmm30
        vpxorq  xmm0,xmm0,xmm17
        vextracti32x4   xmm11,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb xmm17,xmm17,xmm29
        vextracti32x4   xmm7,zmm17,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_935





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_935
$L$_small_initial_partial_block_935:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11


        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm0,XMMWORD[POLY2]


        vpclmulqdq      xmm3,xmm0,xmm25,0x01
        vpslldq xmm3,xmm3,8
        vpxorq  xmm3,xmm25,xmm3


        vpclmulqdq      xmm4,xmm0,xmm3,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm14,xmm0,xmm3,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm4,xmm24,0x96












        vpxorq  xmm14,xmm14,xmm7

        jmp     NEAR $L$_after_reduction_935
$L$_small_initial_compute_done_935:
$L$_after_reduction_935:
        jmp     NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_2_933:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,254
        jae     NEAR $L$_16_blocks_overflow_936
        vpaddd  ymm0,ymm2,ymm28
        jmp     NEAR $L$_16_blocks_ok_936

$L$_16_blocks_overflow_936:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb ymm0,ymm0,ymm29
$L$_16_blocks_ok_936:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        ymm17{k1}{z},[r11*1+r9]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc ymm0,ymm0,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc ymm0,ymm0,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc ymm0,ymm0,ymm31
        vaesenclast     ymm0,ymm0,ymm30
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm11,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb ymm17,ymm17,ymm29
        vextracti32x4   xmm7,zmm17,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_937





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_937
$L$_small_initial_partial_block_937:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm17,xmm1,0x01
        vpclmulqdq      xmm5,xmm17,xmm1,0x10
        vpclmulqdq      xmm0,xmm17,xmm1,0x11
        vpclmulqdq      xmm3,xmm17,xmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_937:

        or      r13,r13
        je      NEAR $L$_after_reduction_937
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_937:
        jmp     NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_3_933:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,253
        jae     NEAR $L$_16_blocks_overflow_938
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_938

$L$_16_blocks_overflow_938:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_938:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_939





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_939
$L$_small_initial_partial_block_939:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm17,ymm1,0x01
        vpclmulqdq      ymm5,ymm17,ymm1,0x10
        vpclmulqdq      ymm0,ymm17,ymm1,0x11
        vpclmulqdq      ymm3,ymm17,ymm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_939:

        or      r13,r13
        je      NEAR $L$_after_reduction_939
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_939:
        jmp     NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_4_933:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        kmovq   k1,[rax*8+r10]
        cmp     r15d,252
        jae     NEAR $L$_16_blocks_overflow_940
        vpaddd  zmm0,zmm2,zmm28
        jmp     NEAR $L$_16_blocks_ok_940

$L$_16_blocks_overflow_940:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpshufb zmm0,zmm0,zmm29
$L$_16_blocks_ok_940:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm0,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17{k1}{z},[r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vextracti32x4   xmm11,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm17{k1}{z},zmm17
        vpshufb zmm17,zmm17,zmm29
        vextracti32x4   xmm7,zmm17,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_941





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_941
$L$_small_initial_partial_block_941:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpxorq  zmm4,zmm4,zmm26
        vpxorq  zmm0,zmm0,zmm24
        vpxorq  zmm3,zmm3,zmm25

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_941:

        or      r13,r13
        je      NEAR $L$_after_reduction_941
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_941:
        jmp     NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_5_933:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,251
        jae     NEAR $L$_16_blocks_overflow_942
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  xmm3,xmm0,xmm27
        jmp     NEAR $L$_16_blocks_ok_942

$L$_16_blocks_overflow_942:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
$L$_16_blocks_ok_942:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc xmm3,xmm3,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc xmm3,xmm3,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     xmm3,xmm3,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  xmm3,xmm3,xmm19
        vextracti32x4   xmm11,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb xmm19,xmm19,xmm29
        vextracti32x4   xmm7,zmm19,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_943





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_943
$L$_small_initial_partial_block_943:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_943:

        or      r13,r13
        je      NEAR $L$_after_reduction_943
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_943:
        jmp     NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_6_933:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,250
        jae     NEAR $L$_16_blocks_overflow_944
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  ymm3,ymm0,ymm27
        jmp     NEAR $L$_16_blocks_ok_944

$L$_16_blocks_overflow_944:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
$L$_16_blocks_ok_944:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc ymm3,ymm3,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc ymm3,ymm3,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     ymm3,ymm3,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm11,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb ymm19,ymm19,ymm29
        vextracti32x4   xmm7,zmm19,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_945





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_945
$L$_small_initial_partial_block_945:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm19,xmm1,0x01
        vpclmulqdq      xmm5,xmm19,xmm1,0x10
        vpclmulqdq      xmm0,xmm19,xmm1,0x11
        vpclmulqdq      xmm3,xmm19,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_945:

        or      r13,r13
        je      NEAR $L$_after_reduction_945
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_945:
        jmp     NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_7_933:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,249
        jae     NEAR $L$_16_blocks_overflow_946
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_946

$L$_16_blocks_overflow_946:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_946:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_947





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_947
$L$_small_initial_partial_block_947:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm19,ymm1,0x01
        vpclmulqdq      ymm5,ymm19,ymm1,0x10
        vpclmulqdq      ymm0,ymm19,ymm1,0x11
        vpclmulqdq      ymm3,ymm19,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_947:

        or      r13,r13
        je      NEAR $L$_after_reduction_947
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_947:
        jmp     NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_8_933:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,64
        kmovq   k1,[rax*8+r10]
        cmp     r15d,248
        jae     NEAR $L$_16_blocks_overflow_948
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        jmp     NEAR $L$_16_blocks_ok_948

$L$_16_blocks_overflow_948:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
$L$_16_blocks_ok_948:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm3,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19{k1}{z},[64+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti32x4   xmm11,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm19{k1}{z},zmm19
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vextracti32x4   xmm7,zmm19,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_949





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_949
$L$_small_initial_partial_block_949:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm17,zmm1,0x11
        vpclmulqdq      zmm22,zmm17,zmm1,0x00
        vpclmulqdq      zmm30,zmm17,zmm1,0x01
        vpclmulqdq      zmm31,zmm17,zmm1,0x10
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm19,zmm1,0x01
        vpclmulqdq      zmm5,zmm19,zmm1,0x10
        vpclmulqdq      zmm0,zmm19,zmm1,0x11
        vpclmulqdq      zmm3,zmm19,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_949:

        or      r13,r13
        je      NEAR $L$_after_reduction_949
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_949:
        jmp     NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_9_933:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,247
        jae     NEAR $L$_16_blocks_overflow_950
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  xmm4,xmm3,xmm27
        jmp     NEAR $L$_16_blocks_ok_950

$L$_16_blocks_overflow_950:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
$L$_16_blocks_ok_950:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc xmm4,xmm4,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc xmm4,xmm4,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     xmm4,xmm4,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  xmm4,xmm4,xmm20
        vextracti32x4   xmm11,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb xmm20,xmm20,xmm29
        vextracti32x4   xmm7,zmm20,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_951





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_951
$L$_small_initial_partial_block_951:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_951:

        or      r13,r13
        je      NEAR $L$_after_reduction_951
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_951:
        jmp     NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_10_933:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,246
        jae     NEAR $L$_16_blocks_overflow_952
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  ymm4,ymm3,ymm27
        jmp     NEAR $L$_16_blocks_ok_952

$L$_16_blocks_overflow_952:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
$L$_16_blocks_ok_952:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc ymm4,ymm4,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc ymm4,ymm4,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     ymm4,ymm4,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  ymm4,ymm4,ymm20
        vextracti32x4   xmm11,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb ymm20,ymm20,ymm29
        vextracti32x4   xmm7,zmm20,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_953





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_953
$L$_small_initial_partial_block_953:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm20,xmm1,0x01
        vpclmulqdq      xmm5,xmm20,xmm1,0x10
        vpclmulqdq      xmm0,xmm20,xmm1,0x11
        vpclmulqdq      xmm3,xmm20,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_953:

        or      r13,r13
        je      NEAR $L$_after_reduction_953
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_953:
        jmp     NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_11_933:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,245
        jae     NEAR $L$_16_blocks_overflow_954
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_954

$L$_16_blocks_overflow_954:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_954:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_955





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_955
$L$_small_initial_partial_block_955:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm20,ymm1,0x01
        vpclmulqdq      ymm5,ymm20,ymm1,0x10
        vpclmulqdq      ymm0,ymm20,ymm1,0x11
        vpclmulqdq      ymm3,ymm20,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_955:

        or      r13,r13
        je      NEAR $L$_after_reduction_955
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_955:
        jmp     NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_12_933:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,128
        kmovq   k1,[rax*8+r10]
        cmp     r15d,244
        jae     NEAR $L$_16_blocks_overflow_956
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        jmp     NEAR $L$_16_blocks_ok_956

$L$_16_blocks_overflow_956:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
$L$_16_blocks_ok_956:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm4,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20{k1}{z},[128+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vextracti32x4   xmm11,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm20{k1}{z},zmm20
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vextracti32x4   xmm7,zmm20,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_957





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_957
$L$_small_initial_partial_block_957:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vpxorq  zmm8,zmm0,zmm8
        vpxorq  zmm22,zmm3,zmm22
        vpxorq  zmm30,zmm4,zmm30
        vpxorq  zmm31,zmm5,zmm31
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm20,zmm1,0x01
        vpclmulqdq      zmm5,zmm20,zmm1,0x10
        vpclmulqdq      zmm0,zmm20,zmm1,0x11
        vpclmulqdq      zmm3,zmm20,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_957:

        or      r13,r13
        je      NEAR $L$_after_reduction_957
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_957:
        jmp     NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_13_933:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,243
        jae     NEAR $L$_16_blocks_overflow_958
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  xmm5,xmm4,xmm27
        jmp     NEAR $L$_16_blocks_ok_958

$L$_16_blocks_overflow_958:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
$L$_16_blocks_ok_958:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,0
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc xmm5,xmm5,xmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc xmm5,xmm5,xmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     xmm5,xmm5,xmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  xmm5,xmm5,xmm21
        vextracti32x4   xmm11,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb xmm21,xmm21,xmm29
        vextracti32x4   xmm7,zmm21,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_959





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_959
$L$_small_initial_partial_block_959:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[224+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[288+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96

        vpxorq  zmm30,zmm30,zmm26
        vpxorq  zmm8,zmm8,zmm24
        vpxorq  zmm22,zmm22,zmm25

        vpxorq  zmm30,zmm30,zmm31
        vpsrldq zmm4,zmm30,8
        vpslldq zmm5,zmm30,8
        vpxorq  zmm0,zmm8,zmm4
        vpxorq  zmm3,zmm22,zmm5
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_959:

        or      r13,r13
        je      NEAR $L$_after_reduction_959
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_959:
        jmp     NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_14_933:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,242
        jae     NEAR $L$_16_blocks_overflow_960
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  ymm5,ymm4,ymm27
        jmp     NEAR $L$_16_blocks_ok_960

$L$_16_blocks_overflow_960:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
$L$_16_blocks_ok_960:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,1
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc ymm5,ymm5,ymm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc ymm5,ymm5,ymm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     ymm5,ymm5,ymm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  ymm5,ymm5,ymm21
        vextracti32x4   xmm11,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb ymm21,ymm21,ymm29
        vextracti32x4   xmm7,zmm21,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_961





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_961
$L$_small_initial_partial_block_961:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[208+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[272+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       xmm1,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm21,xmm1,0x01
        vpclmulqdq      xmm5,xmm21,xmm1,0x10
        vpclmulqdq      xmm0,xmm21,xmm1,0x11
        vpclmulqdq      xmm3,xmm21,xmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_961:

        or      r13,r13
        je      NEAR $L$_after_reduction_961
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_961:
        jmp     NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_15_933:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,241
        jae     NEAR $L$_16_blocks_overflow_962
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_962

$L$_16_blocks_overflow_962:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_962:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,2
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_963





        sub     r13,16
        mov     QWORD[r8],0
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_963
$L$_small_initial_partial_block_963:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[192+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[256+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm21,ymm1,0x01
        vpclmulqdq      ymm5,ymm21,ymm1,0x10
        vpclmulqdq      ymm0,ymm21,ymm1,0x11
        vpclmulqdq      ymm3,ymm21,ymm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_963:

        or      r13,r13
        je      NEAR $L$_after_reduction_963
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_963:
        jmp     NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_16_933:
        lea     r10,[byte64_len_to_mask_table]
        mov     rax,r13
        sub     rax,192
        kmovq   k1,[rax*8+r10]
        cmp     r15d,240
        jae     NEAR $L$_16_blocks_overflow_964
        vpaddd  zmm0,zmm2,zmm28
        vpaddd  zmm3,zmm0,zmm27
        vpaddd  zmm4,zmm3,zmm27
        vpaddd  zmm5,zmm4,zmm27
        jmp     NEAR $L$_16_blocks_ok_964

$L$_16_blocks_overflow_964:
        vpshufb zmm2,zmm2,zmm29
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vmovdqa64       zmm5,ZMMWORD[ddq_add_4444]
        vpaddd  zmm3,zmm0,zmm5
        vpaddd  zmm4,zmm3,zmm5
        vpaddd  zmm5,zmm4,zmm5
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
$L$_16_blocks_ok_964:




        vbroadcastf64x2 zmm30,ZMMWORD[rcx]
        vpxorq  zmm8,zmm14,ZMMWORD[768+rsp]
        vmovdqu64       zmm1,ZMMWORD[rbx*1+rsp]
        vextracti32x4   xmm2,zmm5,3
        vshufi64x2      zmm2,zmm2,zmm2,0


        vbroadcastf64x2 zmm31,ZMMWORD[16+rcx]
        vmovdqu64       zmm18,ZMMWORD[64+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[832+rsp]
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm30
        vpxorq  zmm4,zmm4,zmm30
        vpxorq  zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[32+rcx]


        vpclmulqdq      zmm14,zmm8,zmm1,0x11
        vpclmulqdq      zmm7,zmm8,zmm1,0x00
        vpclmulqdq      zmm10,zmm8,zmm1,0x01
        vpclmulqdq      zmm11,zmm8,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[128+rbx*1+rsp]
        vmovdqa64       zmm8,ZMMWORD[896+rsp]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[48+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vmovdqu64       zmm18,ZMMWORD[192+rbx*1+rsp]
        vmovdqa64       zmm22,ZMMWORD[960+rsp]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[64+rcx]


        vpclmulqdq      zmm20,zmm8,zmm1,0x10
        vpclmulqdq      zmm21,zmm8,zmm1,0x01
        vpclmulqdq      zmm17,zmm8,zmm1,0x11
        vpclmulqdq      zmm19,zmm8,zmm1,0x00
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[80+rcx]


        vpternlogq      zmm14,zmm12,zmm17,0x96
        vpternlogq      zmm7,zmm13,zmm19,0x96
        vpternlogq      zmm11,zmm16,zmm21,0x96
        vpternlogq      zmm10,zmm15,zmm20,0x96
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[96+rcx]
        vmovdqu8        zmm17,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm19,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm20,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm21{k1}{z},[192+r11*1+r9]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[112+rcx]


        vpclmulqdq      zmm15,zmm22,zmm18,0x10
        vpclmulqdq      zmm16,zmm22,zmm18,0x01
        vpclmulqdq      zmm12,zmm22,zmm18,0x11
        vpclmulqdq      zmm13,zmm22,zmm18,0x00
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[128+rcx]
        vpternlogq      zmm10,zmm11,zmm16,0x96
        vpxorq  zmm24,zmm14,zmm12
        vpxorq  zmm25,zmm7,zmm13
        vpxorq  zmm26,zmm10,zmm15
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vbroadcastf64x2 zmm31,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm30
        vaesenc zmm3,zmm3,zmm30
        vaesenc zmm4,zmm4,zmm30
        vaesenc zmm5,zmm5,zmm30
        vbroadcastf64x2 zmm30,ZMMWORD[224+rcx]
        vaesenc zmm0,zmm0,zmm31
        vaesenc zmm3,zmm3,zmm31
        vaesenc zmm4,zmm4,zmm31
        vaesenc zmm5,zmm5,zmm31
        vaesenclast     zmm0,zmm0,zmm30
        vaesenclast     zmm3,zmm3,zmm30
        vaesenclast     zmm4,zmm4,zmm30
        vaesenclast     zmm5,zmm5,zmm30
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vpxorq  zmm4,zmm4,zmm20
        vpxorq  zmm5,zmm5,zmm21
        vextracti32x4   xmm11,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm21{k1}{z},zmm21
        vpshufb zmm17,zmm17,zmm29
        vpshufb zmm19,zmm19,zmm29
        vpshufb zmm20,zmm20,zmm29
        vpshufb zmm21,zmm21,zmm29
        vextracti32x4   xmm7,zmm21,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_965:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm11
        vmovdqu64       zmm1,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm17,zmm1,0x11
        vpclmulqdq      zmm3,zmm17,zmm1,0x00
        vpclmulqdq      zmm4,zmm17,zmm1,0x01
        vpclmulqdq      zmm5,zmm17,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[176+rdx]
        vpclmulqdq      zmm8,zmm19,zmm1,0x11
        vpclmulqdq      zmm22,zmm19,zmm1,0x00
        vpclmulqdq      zmm30,zmm19,zmm1,0x01
        vpclmulqdq      zmm31,zmm19,zmm1,0x10
        vmovdqu64       zmm1,ZMMWORD[240+rdx]
        vpclmulqdq      zmm17,zmm20,zmm1,0x11
        vpclmulqdq      zmm19,zmm20,zmm1,0x00
        vpternlogq      zmm8,zmm17,zmm0,0x96
        vpternlogq      zmm22,zmm19,zmm3,0x96
        vpclmulqdq      zmm17,zmm20,zmm1,0x01
        vpclmulqdq      zmm19,zmm20,zmm1,0x10
        vpternlogq      zmm30,zmm17,zmm4,0x96
        vpternlogq      zmm31,zmm19,zmm5,0x96
        vmovdqu64       ymm1,YMMWORD[304+rdx]
        vinserti64x2    zmm1,zmm1,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm21,zmm1,0x01
        vpclmulqdq      zmm5,zmm21,zmm1,0x10
        vpclmulqdq      zmm0,zmm21,zmm1,0x11
        vpclmulqdq      zmm3,zmm21,zmm1,0x00

        vpxorq  zmm4,zmm4,zmm30
        vpternlogq      zmm5,zmm26,zmm31,0x96
        vpternlogq      zmm0,zmm24,zmm8,0x96
        vpternlogq      zmm3,zmm25,zmm22,0x96

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm30,zmm4,8
        vpslldq zmm31,zmm4,8
        vpxorq  zmm0,zmm0,zmm30
        vpxorq  zmm3,zmm3,zmm31
        vextracti64x4   ymm30,zmm0,1
        vpxorq  ymm0,ymm0,ymm30
        vextracti32x4   xmm30,ymm0,1
        vpxorq  xmm0,xmm0,xmm30
        vextracti64x4   ymm31,zmm3,1
        vpxorq  ymm3,ymm3,ymm31
        vextracti32x4   xmm31,ymm3,1
        vpxorq  xmm3,xmm3,xmm31
        vmovdqa64       xmm1,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm1,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm1,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm1,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_965:
        vpxorq  xmm14,xmm14,xmm7
$L$_after_reduction_965:
        jmp     NEAR $L$_last_blocks_done_933
$L$_last_num_blocks_is_0_933:
        vmovdqa64       zmm13,ZMMWORD[768+rsp]
        vpxorq  zmm13,zmm13,zmm14
        vmovdqu64       zmm12,ZMMWORD[rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[832+rsp]
        vmovdqu64       zmm12,ZMMWORD[64+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10
        vpxorq  zmm26,zmm4,zmm10
        vpxorq  zmm24,zmm0,zmm6
        vpxorq  zmm25,zmm3,zmm7
        vpternlogq      zmm26,zmm5,zmm11,0x96
        vmovdqa64       zmm13,ZMMWORD[896+rsp]
        vmovdqu64       zmm12,ZMMWORD[128+rbx*1+rsp]
        vpclmulqdq      zmm0,zmm13,zmm12,0x11
        vpclmulqdq      zmm3,zmm13,zmm12,0x00
        vpclmulqdq      zmm4,zmm13,zmm12,0x01
        vpclmulqdq      zmm5,zmm13,zmm12,0x10
        vmovdqa64       zmm13,ZMMWORD[960+rsp]
        vmovdqu64       zmm12,ZMMWORD[192+rbx*1+rsp]
        vpclmulqdq      zmm6,zmm13,zmm12,0x11
        vpclmulqdq      zmm7,zmm13,zmm12,0x00
        vpclmulqdq      zmm10,zmm13,zmm12,0x01
        vpclmulqdq      zmm11,zmm13,zmm12,0x10

        vpternlogq      zmm26,zmm4,zmm10,0x96
        vpternlogq      zmm24,zmm0,zmm6,0x96
        vpternlogq      zmm25,zmm3,zmm7,0x96
        vpternlogq      zmm26,zmm5,zmm11,0x96

        vpsrldq zmm0,zmm26,8
        vpslldq zmm3,zmm26,8
        vpxorq  zmm24,zmm24,zmm0
        vpxorq  zmm25,zmm25,zmm3
        vextracti64x4   ymm0,zmm24,1
        vpxorq  ymm24,ymm24,ymm0
        vextracti32x4   xmm0,ymm24,1
        vpxorq  xmm24,xmm24,xmm0
        vextracti64x4   ymm3,zmm25,1
        vpxorq  ymm25,ymm25,ymm3
        vextracti32x4   xmm3,ymm25,1
        vpxorq  xmm25,xmm25,xmm3
        vmovdqa64       xmm4,XMMWORD[POLY2]


        vpclmulqdq      xmm0,xmm4,xmm25,0x01
        vpslldq xmm0,xmm0,8
        vpxorq  xmm0,xmm25,xmm0


        vpclmulqdq      xmm3,xmm4,xmm0,0x00
        vpsrldq xmm3,xmm3,4
        vpclmulqdq      xmm14,xmm4,xmm0,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm3,xmm24,0x96

$L$_last_blocks_done_933:
        vpshufb xmm2,xmm2,xmm29
        jmp     NEAR $L$_ghash_done_821

$L$_message_below_equal_16_blocks_821:


        mov     r12d,r13d
        add     r12d,15
        shr     r12d,4
        cmp     r12,8
        je      NEAR $L$_small_initial_num_blocks_is_8_966
        jl      NEAR $L$_small_initial_num_blocks_is_7_1_966


        cmp     r12,12
        je      NEAR $L$_small_initial_num_blocks_is_12_966
        jl      NEAR $L$_small_initial_num_blocks_is_11_9_966


        cmp     r12,16
        je      NEAR $L$_small_initial_num_blocks_is_16_966
        cmp     r12,15
        je      NEAR $L$_small_initial_num_blocks_is_15_966
        cmp     r12,14
        je      NEAR $L$_small_initial_num_blocks_is_14_966
        jmp     NEAR $L$_small_initial_num_blocks_is_13_966

$L$_small_initial_num_blocks_is_11_9_966:

        cmp     r12,11
        je      NEAR $L$_small_initial_num_blocks_is_11_966
        cmp     r12,10
        je      NEAR $L$_small_initial_num_blocks_is_10_966
        jmp     NEAR $L$_small_initial_num_blocks_is_9_966

$L$_small_initial_num_blocks_is_7_1_966:
        cmp     r12,4
        je      NEAR $L$_small_initial_num_blocks_is_4_966
        jl      NEAR $L$_small_initial_num_blocks_is_3_1_966

        cmp     r12,7
        je      NEAR $L$_small_initial_num_blocks_is_7_966
        cmp     r12,6
        je      NEAR $L$_small_initial_num_blocks_is_6_966
        jmp     NEAR $L$_small_initial_num_blocks_is_5_966

$L$_small_initial_num_blocks_is_3_1_966:

        cmp     r12,3
        je      NEAR $L$_small_initial_num_blocks_is_3_966
        cmp     r12,2
        je      NEAR $L$_small_initial_num_blocks_is_2_966





$L$_small_initial_num_blocks_is_1_966:
        vmovdqa64       xmm29,XMMWORD[SHUF_MASK]
        vpaddd  xmm0,xmm2,XMMWORD[ONE]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,0
        vpshufb xmm0,xmm0,xmm29
        vmovdqu8        xmm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc xmm0,xmm0,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     xmm0,xmm0,xmm15
        vpxorq  xmm0,xmm0,xmm6
        vextracti32x4   xmm12,zmm0,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        XMMWORD[r11*1+r10]{k1},xmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb xmm6,xmm6,xmm29
        vextracti32x4   xmm13,zmm6,0


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_967





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm6,xmm20,0x01
        vpclmulqdq      xmm5,xmm6,xmm20,0x10
        vpclmulqdq      xmm0,xmm6,xmm20,0x11
        vpclmulqdq      xmm3,xmm6,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_967
$L$_small_initial_partial_block_967:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12











        vpxorq  xmm14,xmm14,xmm13

        jmp     NEAR $L$_after_reduction_967
$L$_small_initial_compute_done_967:
$L$_after_reduction_967:
        jmp     NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_2_966:
        vmovdqa64       ymm29,YMMWORD[SHUF_MASK]
        vshufi64x2      ymm0,ymm2,ymm2,0
        vpaddd  ymm0,ymm0,YMMWORD[ddq_add_1234]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,1
        vpshufb ymm0,ymm0,ymm29
        vmovdqu8        ymm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc ymm0,ymm0,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     ymm0,ymm0,ymm15
        vpxorq  ymm0,ymm0,ymm6
        vextracti32x4   xmm12,zmm0,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        YMMWORD[r11*1+r10]{k1},ymm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb ymm6,ymm6,ymm29
        vextracti32x4   xmm13,zmm6,1
        sub     r13,16 * (2 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_968





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm6,ymm20,0x01
        vpclmulqdq      ymm5,ymm6,ymm20,0x10
        vpclmulqdq      ymm0,ymm6,ymm20,0x11
        vpclmulqdq      ymm3,ymm6,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_968
$L$_small_initial_partial_block_968:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm6,xmm20,0x01
        vpclmulqdq      xmm5,xmm6,xmm20,0x10
        vpclmulqdq      xmm0,xmm6,xmm20,0x11
        vpclmulqdq      xmm3,xmm6,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_968:

        or      r13,r13
        je      NEAR $L$_after_reduction_968
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_968:
        jmp     NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_3_966:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,2
        vpshufb zmm0,zmm0,zmm29
        vmovdqu8        zmm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vextracti32x4   xmm12,zmm0,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm6,zmm6,zmm29
        vextracti32x4   xmm13,zmm6,2
        sub     r13,16 * (3 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_969





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_969
$L$_small_initial_partial_block_969:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm6,ymm20,0x01
        vpclmulqdq      ymm5,ymm6,ymm20,0x10
        vpclmulqdq      ymm0,ymm6,ymm20,0x11
        vpclmulqdq      ymm3,ymm6,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_969:

        or      r13,r13
        je      NEAR $L$_after_reduction_969
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_969:
        jmp     NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_4_966:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm0,3
        vpshufb zmm0,zmm0,zmm29
        vmovdqu8        zmm6{k1}{z},[r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vextracti32x4   xmm12,zmm0,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10]{k1},zmm0
        vmovdqu8        zmm0{k1}{z},zmm0
        vpshufb zmm6,zmm6,zmm29
        vextracti32x4   xmm13,zmm6,3
        sub     r13,16 * (4 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_970





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_970
$L$_small_initial_partial_block_970:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_970:

        or      r13,r13
        je      NEAR $L$_after_reduction_970
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_970:
        jmp     NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_5_966:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,0
        vpshufb zmm0,zmm0,zmm29
        vpshufb xmm3,xmm3,xmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        xmm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc xmm3,xmm3,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     xmm3,xmm3,xmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  xmm3,xmm3,xmm7
        vextracti32x4   xmm12,zmm3,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        XMMWORD[64+r11*1+r10]{k1},xmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm6,zmm29
        vpshufb xmm7,xmm7,xmm29
        vextracti32x4   xmm13,zmm7,0
        sub     r13,16 * (5 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_971





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm7,xmm20,0x01
        vpclmulqdq      xmm5,xmm7,xmm20,0x10
        vpclmulqdq      xmm0,xmm7,xmm20,0x11
        vpclmulqdq      xmm3,xmm7,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_971
$L$_small_initial_partial_block_971:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_971:

        or      r13,r13
        je      NEAR $L$_after_reduction_971
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_971:
        jmp     NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_6_966:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,1
        vpshufb zmm0,zmm0,zmm29
        vpshufb ymm3,ymm3,ymm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        ymm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc ymm3,ymm3,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     ymm3,ymm3,ymm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  ymm3,ymm3,ymm7
        vextracti32x4   xmm12,zmm3,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        YMMWORD[64+r11*1+r10]{k1},ymm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm6,zmm29
        vpshufb ymm7,ymm7,ymm29
        vextracti32x4   xmm13,zmm7,1
        sub     r13,16 * (6 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_972





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm7,ymm20,0x01
        vpclmulqdq      ymm5,ymm7,ymm20,0x10
        vpclmulqdq      ymm0,ymm7,ymm20,0x11
        vpclmulqdq      ymm3,ymm7,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_972
$L$_small_initial_partial_block_972:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm7,xmm20,0x01
        vpclmulqdq      xmm5,xmm7,xmm20,0x10
        vpclmulqdq      xmm0,xmm7,xmm20,0x11
        vpclmulqdq      xmm3,xmm7,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_972:

        or      r13,r13
        je      NEAR $L$_after_reduction_972
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_972:
        jmp     NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_7_966:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,2
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vextracti32x4   xmm12,zmm3,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vextracti32x4   xmm13,zmm7,2
        sub     r13,16 * (7 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_973





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm7,zmm20,0x01
        vpclmulqdq      zmm5,zmm7,zmm20,0x10
        vpclmulqdq      zmm0,zmm7,zmm20,0x11
        vpclmulqdq      zmm3,zmm7,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_973
$L$_small_initial_partial_block_973:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm7,ymm20,0x01
        vpclmulqdq      ymm5,ymm7,ymm20,0x10
        vpclmulqdq      ymm0,ymm7,ymm20,0x11
        vpclmulqdq      ymm3,ymm7,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_973:

        or      r13,r13
        je      NEAR $L$_after_reduction_973
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_973:
        jmp     NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_8_966:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,64
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm3,3
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7{k1}{z},[64+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vextracti32x4   xmm12,zmm3,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10]{k1},zmm3
        vmovdqu8        zmm3{k1}{z},zmm3
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vextracti32x4   xmm13,zmm7,3
        sub     r13,16 * (8 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_974





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_974
$L$_small_initial_partial_block_974:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm6,zmm20,0x11
        vpclmulqdq      zmm16,zmm6,zmm20,0x00
        vpclmulqdq      zmm17,zmm6,zmm20,0x01
        vpclmulqdq      zmm19,zmm6,zmm20,0x10
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm7,zmm20,0x01
        vpclmulqdq      zmm5,zmm7,zmm20,0x10
        vpclmulqdq      zmm0,zmm7,zmm20,0x11
        vpclmulqdq      zmm3,zmm7,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_974:

        or      r13,r13
        je      NEAR $L$_after_reduction_974
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_974:
        jmp     NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_9_966:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,0
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb xmm4,xmm4,xmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        xmm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc xmm4,xmm4,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     xmm4,xmm4,xmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  xmm4,xmm4,xmm10
        vextracti32x4   xmm12,zmm4,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        XMMWORD[128+r11*1+r10]{k1},xmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb xmm10,xmm10,xmm29
        vextracti32x4   xmm13,zmm10,0
        sub     r13,16 * (9 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_975





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm10,xmm20,0x01
        vpclmulqdq      xmm5,xmm10,xmm20,0x10
        vpclmulqdq      xmm0,xmm10,xmm20,0x11
        vpclmulqdq      xmm3,xmm10,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_975
$L$_small_initial_partial_block_975:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_975:

        or      r13,r13
        je      NEAR $L$_after_reduction_975
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_975:
        jmp     NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_10_966:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,1
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb ymm4,ymm4,ymm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        ymm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc ymm4,ymm4,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     ymm4,ymm4,ymm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  ymm4,ymm4,ymm10
        vextracti32x4   xmm12,zmm4,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        YMMWORD[128+r11*1+r10]{k1},ymm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb ymm10,ymm10,ymm29
        vextracti32x4   xmm13,zmm10,1
        sub     r13,16 * (10 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_976





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm10,ymm20,0x01
        vpclmulqdq      ymm5,ymm10,ymm20,0x10
        vpclmulqdq      ymm0,ymm10,ymm20,0x11
        vpclmulqdq      ymm3,ymm10,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_976
$L$_small_initial_partial_block_976:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm10,xmm20,0x01
        vpclmulqdq      xmm5,xmm10,xmm20,0x10
        vpclmulqdq      xmm0,xmm10,xmm20,0x11
        vpclmulqdq      xmm3,xmm10,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_976:

        or      r13,r13
        je      NEAR $L$_after_reduction_976
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_976:
        jmp     NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_11_966:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,2
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vextracti32x4   xmm12,zmm4,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vextracti32x4   xmm13,zmm10,2
        sub     r13,16 * (11 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_977





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm10,zmm20,0x01
        vpclmulqdq      zmm5,zmm10,zmm20,0x10
        vpclmulqdq      zmm0,zmm10,zmm20,0x11
        vpclmulqdq      zmm3,zmm10,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_977
$L$_small_initial_partial_block_977:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm10,ymm20,0x01
        vpclmulqdq      ymm5,ymm10,ymm20,0x10
        vpclmulqdq      ymm0,ymm10,ymm20,0x11
        vpclmulqdq      ymm3,ymm10,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_977:

        or      r13,r13
        je      NEAR $L$_after_reduction_977
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_977:
        jmp     NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_12_966:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,128
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm4,3
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10{k1}{z},[128+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vextracti32x4   xmm12,zmm4,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10]{k1},zmm4
        vmovdqu8        zmm4{k1}{z},zmm4
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vextracti32x4   xmm13,zmm10,3
        sub     r13,16 * (12 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_978





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_978
$L$_small_initial_partial_block_978:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vpxorq  zmm15,zmm0,zmm15
        vpxorq  zmm16,zmm3,zmm16
        vpxorq  zmm17,zmm4,zmm17
        vpxorq  zmm19,zmm5,zmm19
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm10,zmm20,0x01
        vpclmulqdq      zmm5,zmm10,zmm20,0x10
        vpclmulqdq      zmm0,zmm10,zmm20,0x11
        vpclmulqdq      zmm3,zmm10,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_978:

        or      r13,r13
        je      NEAR $L$_after_reduction_978
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_978:
        jmp     NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_13_966:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,0
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb xmm5,xmm5,xmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        xmm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc xmm5,xmm5,xmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     xmm5,xmm5,xmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  xmm5,xmm5,xmm11
        vextracti32x4   xmm12,zmm5,0
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        XMMWORD[192+r11*1+r10]{k1},xmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb xmm11,xmm11,xmm29
        vextracti32x4   xmm13,zmm11,0
        sub     r13,16 * (13 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_979





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm11,xmm20,0x01
        vpclmulqdq      xmm5,xmm11,xmm20,0x10
        vpclmulqdq      xmm0,xmm11,xmm20,0x11
        vpclmulqdq      xmm3,xmm11,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_979
$L$_small_initial_partial_block_979:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[160+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[224+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[288+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96

        vpxorq  zmm17,zmm17,zmm19
        vpsrldq zmm4,zmm17,8
        vpslldq zmm5,zmm17,8
        vpxorq  zmm0,zmm15,zmm4
        vpxorq  zmm3,zmm16,zmm5
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_979:

        or      r13,r13
        je      NEAR $L$_after_reduction_979
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_979:
        jmp     NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_14_966:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,1
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb ymm5,ymm5,ymm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        ymm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc ymm5,ymm5,ymm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     ymm5,ymm5,ymm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  ymm5,ymm5,ymm11
        vextracti32x4   xmm12,zmm5,1
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        YMMWORD[192+r11*1+r10]{k1},ymm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb ymm11,ymm11,ymm29
        vextracti32x4   xmm13,zmm11,1
        sub     r13,16 * (14 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_980





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm11,ymm20,0x01
        vpclmulqdq      ymm5,ymm11,ymm20,0x10
        vpclmulqdq      ymm0,ymm11,ymm20,0x11
        vpclmulqdq      ymm3,ymm11,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_980
$L$_small_initial_partial_block_980:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[144+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[208+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[272+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       xmm20,XMMWORD[336+rdx]
        vpclmulqdq      xmm4,xmm11,xmm20,0x01
        vpclmulqdq      xmm5,xmm11,xmm20,0x10
        vpclmulqdq      xmm0,xmm11,xmm20,0x11
        vpclmulqdq      xmm3,xmm11,xmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_980:

        or      r13,r13
        je      NEAR $L$_after_reduction_980
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_980:
        jmp     NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_15_966:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,2
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     zmm5,zmm5,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  zmm5,zmm5,zmm11
        vextracti32x4   xmm12,zmm5,2
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vextracti32x4   xmm13,zmm11,2
        sub     r13,16 * (15 - 1)


        cmp     r13,16
        jl      NEAR $L$_small_initial_partial_block_981





        sub     r13,16
        mov     QWORD[r8],0
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm11,zmm20,0x01
        vpclmulqdq      zmm5,zmm11,zmm20,0x10
        vpclmulqdq      zmm0,zmm11,zmm20,0x11
        vpclmulqdq      zmm3,zmm11,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

        jmp     NEAR $L$_small_initial_compute_done_981
$L$_small_initial_partial_block_981:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[128+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[192+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[256+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[320+rdx]
        vpclmulqdq      ymm4,ymm11,ymm20,0x01
        vpclmulqdq      ymm5,ymm11,ymm20,0x10
        vpclmulqdq      ymm0,ymm11,ymm20,0x11
        vpclmulqdq      ymm3,ymm11,ymm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_981:

        or      r13,r13
        je      NEAR $L$_after_reduction_981
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_981:
        jmp     NEAR $L$_small_initial_blocks_encrypted_966
$L$_small_initial_num_blocks_is_16_966:
        vmovdqa64       zmm29,ZMMWORD[SHUF_MASK]
        vshufi64x2      zmm2,zmm2,zmm2,0
        vpaddd  zmm0,zmm2,ZMMWORD[ddq_add_1234]
        vpaddd  zmm3,zmm2,ZMMWORD[ddq_add_5678]
        vpaddd  zmm4,zmm0,ZMMWORD[ddq_add_8888]
        vpaddd  zmm5,zmm3,ZMMWORD[ddq_add_8888]
        lea     r10,[byte64_len_to_mask_table]
        mov     r15,r13
        sub     r15,192
        kmovq   k1,[r15*8+r10]
        vextracti32x4   xmm2,zmm5,3
        vpshufb zmm0,zmm0,zmm29
        vpshufb zmm3,zmm3,zmm29
        vpshufb zmm4,zmm4,zmm29
        vpshufb zmm5,zmm5,zmm29
        vmovdqu8        zmm6,ZMMWORD[r11*1+r9]
        vmovdqu8        zmm7,ZMMWORD[64+r11*1+r9]
        vmovdqu8        zmm10,ZMMWORD[128+r11*1+r9]
        vmovdqu8        zmm11{k1}{z},[192+r11*1+r9]
        vbroadcastf64x2 zmm15,ZMMWORD[rcx]
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm15
        vpxorq  zmm4,zmm4,zmm15
        vpxorq  zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[16+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[32+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[48+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[64+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[80+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[96+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[112+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[128+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[144+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[160+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[176+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[192+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[208+rcx]
        vaesenc zmm0,zmm0,zmm15
        vaesenc zmm3,zmm3,zmm15
        vaesenc zmm4,zmm4,zmm15
        vaesenc zmm5,zmm5,zmm15
        vbroadcastf64x2 zmm15,ZMMWORD[224+rcx]
        vaesenclast     zmm0,zmm0,zmm15
        vaesenclast     zmm3,zmm3,zmm15
        vaesenclast     zmm4,zmm4,zmm15
        vaesenclast     zmm5,zmm5,zmm15
        vpxorq  zmm0,zmm0,zmm6
        vpxorq  zmm3,zmm3,zmm7
        vpxorq  zmm4,zmm4,zmm10
        vpxorq  zmm5,zmm5,zmm11
        vextracti32x4   xmm12,zmm5,3
        mov     r10,QWORD[120+rbp]
        vmovdqu8        ZMMWORD[r11*1+r10],zmm0
        vmovdqu8        ZMMWORD[64+r11*1+r10],zmm3
        vmovdqu8        ZMMWORD[128+r11*1+r10],zmm4
        vmovdqu8        ZMMWORD[192+r11*1+r10]{k1},zmm5
        vmovdqu8        zmm5{k1}{z},zmm5
        vpshufb zmm6,zmm6,zmm29
        vpshufb zmm7,zmm7,zmm29
        vpshufb zmm10,zmm10,zmm29
        vpshufb zmm11,zmm11,zmm29
        vextracti32x4   xmm13,zmm11,3
        sub     r13,16 * (16 - 1)
$L$_small_initial_partial_block_982:








        mov     QWORD[r8],r13
        vmovdqu64       XMMWORD[16+rdx],xmm12
        vpxorq  zmm6,zmm6,zmm14
        vmovdqu64       zmm20,ZMMWORD[112+rdx]
        vpclmulqdq      zmm0,zmm6,zmm20,0x11
        vpclmulqdq      zmm3,zmm6,zmm20,0x00
        vpclmulqdq      zmm4,zmm6,zmm20,0x01
        vpclmulqdq      zmm5,zmm6,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[176+rdx]
        vpclmulqdq      zmm15,zmm7,zmm20,0x11
        vpclmulqdq      zmm16,zmm7,zmm20,0x00
        vpclmulqdq      zmm17,zmm7,zmm20,0x01
        vpclmulqdq      zmm19,zmm7,zmm20,0x10
        vmovdqu64       zmm20,ZMMWORD[240+rdx]
        vpclmulqdq      zmm6,zmm10,zmm20,0x11
        vpclmulqdq      zmm7,zmm10,zmm20,0x00
        vpternlogq      zmm15,zmm6,zmm0,0x96
        vpternlogq      zmm16,zmm7,zmm3,0x96
        vpclmulqdq      zmm6,zmm10,zmm20,0x01
        vpclmulqdq      zmm7,zmm10,zmm20,0x10
        vpternlogq      zmm17,zmm6,zmm4,0x96
        vpternlogq      zmm19,zmm7,zmm5,0x96
        vmovdqu64       ymm20,YMMWORD[304+rdx]
        vinserti64x2    zmm20,zmm20,ZMMWORD[336+rdx],2
        vpclmulqdq      zmm4,zmm11,zmm20,0x01
        vpclmulqdq      zmm5,zmm11,zmm20,0x10
        vpclmulqdq      zmm0,zmm11,zmm20,0x11
        vpclmulqdq      zmm3,zmm11,zmm20,0x00

        vpxorq  zmm4,zmm4,zmm17
        vpxorq  zmm5,zmm5,zmm19
        vpxorq  zmm0,zmm0,zmm15
        vpxorq  zmm3,zmm3,zmm16

        vpxorq  zmm4,zmm4,zmm5
        vpsrldq zmm17,zmm4,8
        vpslldq zmm19,zmm4,8
        vpxorq  zmm0,zmm0,zmm17
        vpxorq  zmm3,zmm3,zmm19
        vextracti64x4   ymm17,zmm0,1
        vpxorq  ymm0,ymm0,ymm17
        vextracti32x4   xmm17,ymm0,1
        vpxorq  xmm0,xmm0,xmm17
        vextracti64x4   ymm19,zmm3,1
        vpxorq  ymm3,ymm3,ymm19
        vextracti32x4   xmm19,ymm3,1
        vpxorq  xmm3,xmm3,xmm19
        vmovdqa64       xmm20,XMMWORD[POLY2]


        vpclmulqdq      xmm4,xmm20,xmm3,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm4,xmm3,xmm4


        vpclmulqdq      xmm5,xmm20,xmm4,0x00
        vpsrldq xmm5,xmm5,4
        vpclmulqdq      xmm14,xmm20,xmm4,0x10
        vpslldq xmm14,xmm14,4
        vpternlogq      xmm14,xmm5,xmm0,0x96

$L$_small_initial_compute_done_982:
        vpxorq  xmm14,xmm14,xmm13
$L$_after_reduction_982:
$L$_small_initial_blocks_encrypted_966:
$L$_ghash_done_821:
        vmovdqu64       XMMWORD[rdx],xmm2
        vmovdqu64       XMMWORD[64+rdx],xmm14
$L$_enc_dec_done_821:
        jmp     NEAR $L$exit_gcm_decrypt
$L$exit_gcm_decrypt:
        cmp     QWORD[112+rbp],256
        jbe     NEAR $L$skip_hkeys_cleanup_983
        vpxor   xmm0,xmm0,xmm0
        vmovdqa64       ZMMWORD[rsp],zmm0
        vmovdqa64       ZMMWORD[64+rsp],zmm0
        vmovdqa64       ZMMWORD[128+rsp],zmm0
        vmovdqa64       ZMMWORD[192+rsp],zmm0
        vmovdqa64       ZMMWORD[256+rsp],zmm0
        vmovdqa64       ZMMWORD[320+rsp],zmm0
        vmovdqa64       ZMMWORD[384+rsp],zmm0
        vmovdqa64       ZMMWORD[448+rsp],zmm0
        vmovdqa64       ZMMWORD[512+rsp],zmm0
        vmovdqa64       ZMMWORD[576+rsp],zmm0
        vmovdqa64       ZMMWORD[640+rsp],zmm0
        vmovdqa64       ZMMWORD[704+rsp],zmm0
$L$skip_hkeys_cleanup_983:
        vzeroupper
        vmovdqu xmm15,XMMWORD[((-16))+rbp]
        vmovdqu xmm14,XMMWORD[((-32))+rbp]
        vmovdqu xmm13,XMMWORD[((-48))+rbp]
        vmovdqu xmm12,XMMWORD[((-64))+rbp]
        vmovdqu xmm11,XMMWORD[((-80))+rbp]
        vmovdqu xmm10,XMMWORD[((-96))+rbp]
        vmovdqu xmm9,XMMWORD[((-112))+rbp]
        vmovdqu xmm8,XMMWORD[((-128))+rbp]
        vmovdqu xmm7,XMMWORD[((-144))+rbp]
        vmovdqu xmm6,XMMWORD[((-160))+rbp]
        lea     rsp,[8+rbp]
        pop     rsi

        pop     rdi

        pop     r15

        pop     r14

        pop     r13

        pop     r12

        pop     rbp

        pop     rbx

        DB      0F3h,0C3h               ;repret
$L$decrypt_seh_end:


global  ossl_aes_gcm_finalize_avx512

ALIGN   32
ossl_aes_gcm_finalize_avx512:

DB      243,15,30,250
        vmovdqu xmm2,XMMWORD[336+rcx]
        vmovdqu xmm3,XMMWORD[32+rcx]
        vmovdqu xmm4,XMMWORD[64+rcx]


        cmp     rdx,0
        je      NEAR $L$_partial_done_984

        vpclmulqdq      xmm0,xmm4,xmm2,0x11
        vpclmulqdq      xmm16,xmm4,xmm2,0x00
        vpclmulqdq      xmm17,xmm4,xmm2,0x01
        vpclmulqdq      xmm4,xmm4,xmm2,0x10
        vpxorq  xmm4,xmm4,xmm17

        vpsrldq xmm17,xmm4,8
        vpslldq xmm4,xmm4,8
        vpxorq  xmm0,xmm0,xmm17
        vpxorq  xmm4,xmm4,xmm16



        vmovdqu64       xmm17,XMMWORD[POLY2]

        vpclmulqdq      xmm16,xmm17,xmm4,0x01
        vpslldq xmm16,xmm16,8
        vpxorq  xmm4,xmm4,xmm16



        vpclmulqdq      xmm16,xmm17,xmm4,0x00
        vpsrldq xmm16,xmm16,4
        vpclmulqdq      xmm4,xmm17,xmm4,0x10
        vpslldq xmm4,xmm4,4

        vpternlogq      xmm4,xmm0,xmm16,0x96

$L$_partial_done_984:
        vmovq   xmm5,QWORD[56+rcx]
        vpinsrq xmm5,xmm5,QWORD[48+rcx],1
        vpsllq  xmm5,xmm5,3

        vpxor   xmm4,xmm4,xmm5

        vpclmulqdq      xmm0,xmm4,xmm2,0x11
        vpclmulqdq      xmm16,xmm4,xmm2,0x00
        vpclmulqdq      xmm17,xmm4,xmm2,0x01
        vpclmulqdq      xmm4,xmm4,xmm2,0x10
        vpxorq  xmm4,xmm4,xmm17

        vpsrldq xmm17,xmm4,8
        vpslldq xmm4,xmm4,8
        vpxorq  xmm0,xmm0,xmm17
        vpxorq  xmm4,xmm4,xmm16



        vmovdqu64       xmm17,XMMWORD[POLY2]

        vpclmulqdq      xmm16,xmm17,xmm4,0x01
        vpslldq xmm16,xmm16,8
        vpxorq  xmm4,xmm4,xmm16



        vpclmulqdq      xmm16,xmm17,xmm4,0x00
        vpsrldq xmm16,xmm16,4
        vpclmulqdq      xmm4,xmm17,xmm4,0x10
        vpslldq xmm4,xmm4,4

        vpternlogq      xmm4,xmm0,xmm16,0x96

        vpshufb xmm4,xmm4,XMMWORD[SHUF_MASK]
        vpxor   xmm3,xmm3,xmm4

$L$_return_T_984:
        vmovdqu XMMWORD[64+rcx],xmm3
$L$abort_finalize:
        DB      0F3h,0C3h               ;repret


global  ossl_gcm_gmult_avx512


ALIGN   32
ossl_gcm_gmult_avx512:

DB      243,15,30,250
        vmovdqu64       xmm1,XMMWORD[rcx]
        vmovdqu64       xmm2,XMMWORD[336+rdx]

        vpclmulqdq      xmm3,xmm1,xmm2,0x11
        vpclmulqdq      xmm4,xmm1,xmm2,0x00
        vpclmulqdq      xmm5,xmm1,xmm2,0x01
        vpclmulqdq      xmm1,xmm1,xmm2,0x10
        vpxorq  xmm1,xmm1,xmm5

        vpsrldq xmm5,xmm1,8
        vpslldq xmm1,xmm1,8
        vpxorq  xmm3,xmm3,xmm5
        vpxorq  xmm1,xmm1,xmm4



        vmovdqu64       xmm5,XMMWORD[POLY2]

        vpclmulqdq      xmm4,xmm5,xmm1,0x01
        vpslldq xmm4,xmm4,8
        vpxorq  xmm1,xmm1,xmm4



        vpclmulqdq      xmm4,xmm5,xmm1,0x00
        vpsrldq xmm4,xmm4,4
        vpclmulqdq      xmm1,xmm5,xmm1,0x10
        vpslldq xmm1,xmm1,4

        vpternlogq      xmm1,xmm3,xmm4,0x96

        vmovdqu64       XMMWORD[rcx],xmm1
        vzeroupper
$L$abort_gmult:
        DB      0F3h,0C3h               ;repret


section .pdata rdata align=4
ALIGN   4
        DD      $L$setiv_seh_begin wrt ..imagebase
        DD      $L$setiv_seh_end wrt ..imagebase
        DD      $L$setiv_seh_info wrt ..imagebase

        DD      $L$ghash_seh_begin wrt ..imagebase
        DD      $L$ghash_seh_end wrt ..imagebase
        DD      $L$ghash_seh_info wrt ..imagebase

        DD      $L$encrypt_seh_begin wrt ..imagebase
        DD      $L$encrypt_seh_end wrt ..imagebase
        DD      $L$encrypt_seh_info wrt ..imagebase

        DD      $L$decrypt_seh_begin wrt ..imagebase
        DD      $L$decrypt_seh_end wrt ..imagebase
        DD      $L$decrypt_seh_info wrt ..imagebase

section .xdata rdata align=8
ALIGN   8
$L$setiv_seh_info:
DB      1
DB      $L$setiv_seh_prolog_end-$L$setiv_seh_begin
DB      31

DB      165
DB      $L$setiv_seh_save_xmm15-$L$setiv_seh_begin
DB      248
        DW      9
DB      $L$setiv_seh_save_xmm14-$L$setiv_seh_begin
DB      232
        DW      8
DB      $L$setiv_seh_save_xmm13-$L$setiv_seh_begin
DB      216
        DW      7
DB      $L$setiv_seh_save_xmm12-$L$setiv_seh_begin
DB      200
        DW      6
DB      $L$setiv_seh_save_xmm11-$L$setiv_seh_begin
DB      184
        DW      5
DB      $L$setiv_seh_save_xmm10-$L$setiv_seh_begin
DB      168
        DW      4
DB      $L$setiv_seh_save_xmm9-$L$setiv_seh_begin
DB      152
        DW      3
DB      $L$setiv_seh_save_xmm8-$L$setiv_seh_begin
DB      136
        DW      2
DB      $L$setiv_seh_save_xmm7-$L$setiv_seh_begin
DB      120
        DW      1
DB      $L$setiv_seh_save_xmm6-$L$setiv_seh_begin
DB      104
        DW      0

DB      $L$setiv_seh_setfp-$L$setiv_seh_begin
DB      3


DB      $L$setiv_seh_allocstack_xmm-$L$setiv_seh_begin
DB      1
        DW      21
DB      $L$setiv_seh_push_rsi-$L$setiv_seh_begin
DB      96
DB      $L$setiv_seh_push_rdi-$L$setiv_seh_begin
DB      112
DB      $L$setiv_seh_push_r15-$L$setiv_seh_begin
DB      240
DB      $L$setiv_seh_push_r14-$L$setiv_seh_begin
DB      224
DB      $L$setiv_seh_push_r13-$L$setiv_seh_begin
DB      208
DB      $L$setiv_seh_push_r12-$L$setiv_seh_begin
DB      192
DB      $L$setiv_seh_push_rbp-$L$setiv_seh_begin
DB      80
DB      $L$setiv_seh_push_rbx-$L$setiv_seh_begin
DB      48
ALIGN   8
$L$ghash_seh_info:
DB      1
DB      $L$ghash_seh_prolog_end-$L$ghash_seh_begin
DB      31

DB      165
DB      $L$ghash_seh_save_xmm15-$L$ghash_seh_begin
DB      248
        DW      9
DB      $L$ghash_seh_save_xmm14-$L$ghash_seh_begin
DB      232
        DW      8
DB      $L$ghash_seh_save_xmm13-$L$ghash_seh_begin
DB      216
        DW      7
DB      $L$ghash_seh_save_xmm12-$L$ghash_seh_begin
DB      200
        DW      6
DB      $L$ghash_seh_save_xmm11-$L$ghash_seh_begin
DB      184
        DW      5
DB      $L$ghash_seh_save_xmm10-$L$ghash_seh_begin
DB      168
        DW      4
DB      $L$ghash_seh_save_xmm9-$L$ghash_seh_begin
DB      152
        DW      3
DB      $L$ghash_seh_save_xmm8-$L$ghash_seh_begin
DB      136
        DW      2
DB      $L$ghash_seh_save_xmm7-$L$ghash_seh_begin
DB      120
        DW      1
DB      $L$ghash_seh_save_xmm6-$L$ghash_seh_begin
DB      104
        DW      0

DB      $L$ghash_seh_setfp-$L$ghash_seh_begin
DB      3


DB      $L$ghash_seh_allocstack_xmm-$L$ghash_seh_begin
DB      1
        DW      21
DB      $L$ghash_seh_push_rsi-$L$ghash_seh_begin
DB      96
DB      $L$ghash_seh_push_rdi-$L$ghash_seh_begin
DB      112
DB      $L$ghash_seh_push_r15-$L$ghash_seh_begin
DB      240
DB      $L$ghash_seh_push_r14-$L$ghash_seh_begin
DB      224
DB      $L$ghash_seh_push_r13-$L$ghash_seh_begin
DB      208
DB      $L$ghash_seh_push_r12-$L$ghash_seh_begin
DB      192
DB      $L$ghash_seh_push_rbp-$L$ghash_seh_begin
DB      80
DB      $L$ghash_seh_push_rbx-$L$ghash_seh_begin
DB      48
ALIGN   8
$L$encrypt_seh_info:
DB      1
DB      $L$encrypt_seh_prolog_end-$L$encrypt_seh_begin
DB      31

DB      165
DB      $L$encrypt_seh_save_xmm15-$L$encrypt_seh_begin
DB      248
        DW      9
DB      $L$encrypt_seh_save_xmm14-$L$encrypt_seh_begin
DB      232
        DW      8
DB      $L$encrypt_seh_save_xmm13-$L$encrypt_seh_begin
DB      216
        DW      7
DB      $L$encrypt_seh_save_xmm12-$L$encrypt_seh_begin
DB      200
        DW      6
DB      $L$encrypt_seh_save_xmm11-$L$encrypt_seh_begin
DB      184
        DW      5
DB      $L$encrypt_seh_save_xmm10-$L$encrypt_seh_begin
DB      168
        DW      4
DB      $L$encrypt_seh_save_xmm9-$L$encrypt_seh_begin
DB      152
        DW      3
DB      $L$encrypt_seh_save_xmm8-$L$encrypt_seh_begin
DB      136
        DW      2
DB      $L$encrypt_seh_save_xmm7-$L$encrypt_seh_begin
DB      120
        DW      1
DB      $L$encrypt_seh_save_xmm6-$L$encrypt_seh_begin
DB      104
        DW      0

DB      $L$encrypt_seh_setfp-$L$encrypt_seh_begin
DB      3


DB      $L$encrypt_seh_allocstack_xmm-$L$encrypt_seh_begin
DB      1
        DW      21
DB      $L$encrypt_seh_push_rsi-$L$encrypt_seh_begin
DB      96
DB      $L$encrypt_seh_push_rdi-$L$encrypt_seh_begin
DB      112
DB      $L$encrypt_seh_push_r15-$L$encrypt_seh_begin
DB      240
DB      $L$encrypt_seh_push_r14-$L$encrypt_seh_begin
DB      224
DB      $L$encrypt_seh_push_r13-$L$encrypt_seh_begin
DB      208
DB      $L$encrypt_seh_push_r12-$L$encrypt_seh_begin
DB      192
DB      $L$encrypt_seh_push_rbp-$L$encrypt_seh_begin
DB      80
DB      $L$encrypt_seh_push_rbx-$L$encrypt_seh_begin
DB      48
ALIGN   8
$L$decrypt_seh_info:
DB      1
DB      $L$decrypt_seh_prolog_end-$L$decrypt_seh_begin
DB      31

DB      165
DB      $L$decrypt_seh_save_xmm15-$L$decrypt_seh_begin
DB      248
        DW      9
DB      $L$decrypt_seh_save_xmm14-$L$decrypt_seh_begin
DB      232
        DW      8
DB      $L$decrypt_seh_save_xmm13-$L$decrypt_seh_begin
DB      216
        DW      7
DB      $L$decrypt_seh_save_xmm12-$L$decrypt_seh_begin
DB      200
        DW      6
DB      $L$decrypt_seh_save_xmm11-$L$decrypt_seh_begin
DB      184
        DW      5
DB      $L$decrypt_seh_save_xmm10-$L$decrypt_seh_begin
DB      168
        DW      4
DB      $L$decrypt_seh_save_xmm9-$L$decrypt_seh_begin
DB      152
        DW      3
DB      $L$decrypt_seh_save_xmm8-$L$decrypt_seh_begin
DB      136
        DW      2
DB      $L$decrypt_seh_save_xmm7-$L$decrypt_seh_begin
DB      120
        DW      1
DB      $L$decrypt_seh_save_xmm6-$L$decrypt_seh_begin
DB      104
        DW      0

DB      $L$decrypt_seh_setfp-$L$decrypt_seh_begin
DB      3


DB      $L$decrypt_seh_allocstack_xmm-$L$decrypt_seh_begin
DB      1
        DW      21
DB      $L$decrypt_seh_push_rsi-$L$decrypt_seh_begin
DB      96
DB      $L$decrypt_seh_push_rdi-$L$decrypt_seh_begin
DB      112
DB      $L$decrypt_seh_push_r15-$L$decrypt_seh_begin
DB      240
DB      $L$decrypt_seh_push_r14-$L$decrypt_seh_begin
DB      224
DB      $L$decrypt_seh_push_r13-$L$decrypt_seh_begin
DB      208
DB      $L$decrypt_seh_push_r12-$L$decrypt_seh_begin
DB      192
DB      $L$decrypt_seh_push_rbp-$L$decrypt_seh_begin
DB      80
DB      $L$decrypt_seh_push_rbx-$L$decrypt_seh_begin
DB      48
section .rdata rdata align=16
ALIGN   16
POLY:   DQ      0x0000000000000001,0xC200000000000000

ALIGN   64
POLY2:
        DQ      0x00000001C2000000,0xC200000000000000
        DQ      0x00000001C2000000,0xC200000000000000
        DQ      0x00000001C2000000,0xC200000000000000
        DQ      0x00000001C2000000,0xC200000000000000

ALIGN   16
TWOONE: DQ      0x0000000000000001,0x0000000100000000



ALIGN   64
SHUF_MASK:
        DQ      0x08090A0B0C0D0E0F,0x0001020304050607
        DQ      0x08090A0B0C0D0E0F,0x0001020304050607
        DQ      0x08090A0B0C0D0E0F,0x0001020304050607
        DQ      0x08090A0B0C0D0E0F,0x0001020304050607

ALIGN   16
SHIFT_MASK:
        DQ      0x0706050403020100,0x0f0e0d0c0b0a0908

ALL_F:
        DQ      0xffffffffffffffff,0xffffffffffffffff

ZERO:
        DQ      0x0000000000000000,0x0000000000000000

ALIGN   16
ONE:
        DQ      0x0000000000000001,0x0000000000000000

ALIGN   16
ONEf:
        DQ      0x0000000000000000,0x0100000000000000

ALIGN   64
ddq_add_1234:
        DQ      0x0000000000000001,0x0000000000000000
        DQ      0x0000000000000002,0x0000000000000000
        DQ      0x0000000000000003,0x0000000000000000
        DQ      0x0000000000000004,0x0000000000000000

ALIGN   64
ddq_add_5678:
        DQ      0x0000000000000005,0x0000000000000000
        DQ      0x0000000000000006,0x0000000000000000
        DQ      0x0000000000000007,0x0000000000000000
        DQ      0x0000000000000008,0x0000000000000000

ALIGN   64
ddq_add_4444:
        DQ      0x0000000000000004,0x0000000000000000
        DQ      0x0000000000000004,0x0000000000000000
        DQ      0x0000000000000004,0x0000000000000000
        DQ      0x0000000000000004,0x0000000000000000

ALIGN   64
ddq_add_8888:
        DQ      0x0000000000000008,0x0000000000000000
        DQ      0x0000000000000008,0x0000000000000000
        DQ      0x0000000000000008,0x0000000000000000
        DQ      0x0000000000000008,0x0000000000000000

ALIGN   64
ddq_addbe_1234:
        DQ      0x0000000000000000,0x0100000000000000
        DQ      0x0000000000000000,0x0200000000000000
        DQ      0x0000000000000000,0x0300000000000000
        DQ      0x0000000000000000,0x0400000000000000

ALIGN   64
ddq_addbe_4444:
        DQ      0x0000000000000000,0x0400000000000000
        DQ      0x0000000000000000,0x0400000000000000
        DQ      0x0000000000000000,0x0400000000000000
        DQ      0x0000000000000000,0x0400000000000000

ALIGN   64
byte_len_to_mask_table:
        DW      0x0000,0x0001,0x0003,0x0007
        DW      0x000f,0x001f,0x003f,0x007f
        DW      0x00ff,0x01ff,0x03ff,0x07ff
        DW      0x0fff,0x1fff,0x3fff,0x7fff
        DW      0xffff

ALIGN   64
byte64_len_to_mask_table:
        DQ      0x0000000000000000,0x0000000000000001
        DQ      0x0000000000000003,0x0000000000000007
        DQ      0x000000000000000f,0x000000000000001f
        DQ      0x000000000000003f,0x000000000000007f
        DQ      0x00000000000000ff,0x00000000000001ff
        DQ      0x00000000000003ff,0x00000000000007ff
        DQ      0x0000000000000fff,0x0000000000001fff
        DQ      0x0000000000003fff,0x0000000000007fff
        DQ      0x000000000000ffff,0x000000000001ffff
        DQ      0x000000000003ffff,0x000000000007ffff
        DQ      0x00000000000fffff,0x00000000001fffff
        DQ      0x00000000003fffff,0x00000000007fffff
        DQ      0x0000000000ffffff,0x0000000001ffffff
        DQ      0x0000000003ffffff,0x0000000007ffffff
        DQ      0x000000000fffffff,0x000000001fffffff
        DQ      0x000000003fffffff,0x000000007fffffff
        DQ      0x00000000ffffffff,0x00000001ffffffff
        DQ      0x00000003ffffffff,0x00000007ffffffff
        DQ      0x0000000fffffffff,0x0000001fffffffff
        DQ      0x0000003fffffffff,0x0000007fffffffff
        DQ      0x000000ffffffffff,0x000001ffffffffff
        DQ      0x000003ffffffffff,0x000007ffffffffff
        DQ      0x00000fffffffffff,0x00001fffffffffff
        DQ      0x00003fffffffffff,0x00007fffffffffff
        DQ      0x0000ffffffffffff,0x0001ffffffffffff
        DQ      0x0003ffffffffffff,0x0007ffffffffffff
        DQ      0x000fffffffffffff,0x001fffffffffffff
        DQ      0x003fffffffffffff,0x007fffffffffffff
        DQ      0x00ffffffffffffff,0x01ffffffffffffff
        DQ      0x03ffffffffffffff,0x07ffffffffffffff
        DQ      0x0fffffffffffffff,0x1fffffffffffffff
        DQ      0x3fffffffffffffff,0x7fffffffffffffff
        DQ      0xffffffffffffffff
